mysql - EXPLAIN 结果中的 "key_len"列更重要还是 "rows"列?

标签 mysql sql performance indexing

我用两种不同类型的索引执行了一个查询。这是他们的结果:

第一种索引:

enter image description here

第二种索引:

enter image description here

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

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

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

最佳答案

简答:Rowskey_len 更重要.

有了这些微小的数字,您无法预测太多。以下是一些提示:

INT是 4 个字节,BIGINT是8个字节。 NULL加 1。所以我猜 key_len=9 是一个 NULLable BIGINT? (如果您提供了 SHOW CREATE TABLESELECT... ,那将会很有帮助。) 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/

相关文章:

php - 如何用 php 显示 sphinx 搜索结果?

php - 如何在学校门户中表示三个学期的学年

sql - 使用 CASE WHEN 从单独的行获取单独的值

java - 如何知道故障原因?

r - 提升 ggplot2 性能

mysql - 使用 SQL 的第一个离线应用程序

MySQL 查询失败

c# - 将大量整数加入 LINQ 查询

sql - 获取一组记录的最接近给定日期的日期

c++ - 我的 SDL C++(2d 游戏)使用 opengl 很慢,怎么办?