2

从 MySQL 5.7 源代码,

使用优先队列排序时,我们不能使用打包插件。没有PQ,我们可以试试。

问:为什么 MySQL 5.7 在优先级队列中不使用打包插件?

4

1 回答 1

1

打包记录的想法是限制例如空varchar(10000)使用的内存。但在最坏的情况下(例如,使用最大长度的 varchar),打包的记录实际上可能比未打包的记录需要更多的空间。

对于优先队列排序,内存是一开始就分配的,由于它必须能够保存最坏情况的记录,所以打包它是没有意义的,所以没有使用它。并且在代码中的那个点,它实际上不能使用,因为当前的实现和代码的其余部分期望这些记录有充分的理由被解包(例如,队列分配的内存少于最坏情况打包记录所需的内存)。

于 2018-10-12T11:19:32.727 回答