我用两种不同类型的索引执行了一个查询。这是他们的结果:
第一种索引:
第二种索引:
如您所见,第一个在 “key_len” 列中有更大的数字。第二个在“行”列中有更大的数字。
我想知道,哪个更有效率?
注意:我的数据集非常小。
最佳答案
简答:Rows
比 key_len
更重要.
有了这些微小的数字,您无法预测太多。以下是一些提示:
INT
是 4 个字节,BIGINT
是8个字节。 NULL
加 1。所以我猜 key_len=9 是一个 NULLable BIGINT? (如果您提供了 SHOW CREATE TABLE
和 SELECT...
,那将会很有帮助。) key_len=5 可能是一个可为 null 的 INT。使用 NOT NULL
在适当的时候。
VARCHAR(255) CHARSET utf8
将权衡为 key_length=767。
Rows
(3 或 4)在 <derived>
上table 是一个精确的计数,因为 EXPLAIN
评估了它。 Rows
在其他线路上是近似的;有时它们会偏离(任一方向)2 倍,甚至更多。
eq_ref
Rows=1
基本上通过 UNIQUE
查找是很常见的或 PRIMARY
key 。所以这可能是准确的,除非该行丢失。
判断EXPLAIN
的粗略(非常粗略)方式是乘以Rows
中的数字柱子。在您的情况下,您得到 9 和 32。但我不会仓促得出 9 比 32 快的结论。如果它是 9000000 与 32000,那么我可能会仓促得出结论。
新手最常犯的错误是不理解 INDEX(last_name, first_name)
通常比 INDEX(last_name) , INDEX(first_name)
性能更高.
关于mysql - EXPLAIN 结果中的 "key_len"列更重要还是 "rows"列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39480380/