我用两种不同的索引执行了查询。以下是他们的结果:
第一种索引:
第二种指数:
如您所见,第一个在“key_len”列中有一个更大的数字。第二个在“rows”列中有一个更大的数字。
我想知道哪一个更有效率?
注意:我的数据集非常小。
答案 0 :(得分:3)
简短回答:Rows
比key_len
更重要。
对于那些微小的数字,你无法预测太多。以下是一些提示:
INT
是4个字节,BIGINT
是8个字节。 NULL
添加1.所以我猜key_len = 9是一个NULLable BIGINT? (如果你提供了SHOW CREATE TABLE
和SELECT...
,那将非常有用。)key_len = 5可能是一个可以为空的INT。在适当的地方使用NOT NULL
。
VARCHAR(255) CHARSET utf8
将称为key_length = 767。
Rows
表上的 <derived>
(3或4)是精确计数,因为EXPLAIN
对其进行了评估。其他行上的Rows
是近似值;有时它们会被关闭(任一方向)2倍,也许更多。
eq_ref
Rows=1
通常用UNIQUE
或PRIMARY
密钥查找。所以这可能是准确的,除非缺少行。
判断EXPLAIN
的粗略(粗略)方法是将Rows
列中的数字相乘。在你的情况下,你得到9和32.但是我不会得出结论9比32快。如果它是9000000而不是32000,那么我可能会得出结论。
新手最常犯的错误是不理解INDEX(last_name, first_name)
通常比INDEX(last_name) , INDEX(first_name)
更高效。