“key_len”列在EXPLAIN的结果中更重要还是“行”列?

时间:2016-09-13 23:23:49

标签: mysql sql performance indexing

我用两种不同的索引执行了查询。以下是他们的结果:

第一种索引:

enter image description here

第二种指数:

enter image description here

如您所见,第一个在“key_len”列中有一个更大的数字。第二个在“rows”列中有一个更大的数字。

我想知道哪一个更有效率?

注意:我的数据集非常小。

1 个答案:

答案 0 :(得分:3)

简短回答:Rowskey_len更重要。

对于那些微小的数字,你无法预测太多。以下是一些提示:

INT是4个字节,BIGINT是8个字节。 NULL添加1.所以我猜key_len = 9是一个NULLable BIGINT? (如果你提供了SHOW CREATE TABLESELECT...,那将非常有用。)key_len = 5可能是一个可以为空的INT。在适当的地方使用NOT NULL

VARCHAR(255) CHARSET utf8将称为key_length = 767。

Rows表上的

<derived>(3或4)是精确计数,因为EXPLAIN对其进行了评估。其他行上的Rows是近似值;有时它们会被关闭(任一方向)2倍,也许更多。

eq_ref Rows=1通常用UNIQUEPRIMARY密钥查找。所以这可能是准确的,除非缺少行。

判断EXPLAIN的粗略(粗略)方法是将Rows列中的数字相乘。在你的情况下,你得到9和32.但是我不会得出结论9比32快。如果它是9000000而不是32000,那么我可能会得出结论。

新手最常犯的错误是不理解INDEX(last_name, first_name)通常比INDEX(last_name) , INDEX(first_name)更高效。