考虑一个值和哈希表,如下所示:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| val | char(9) | NO | | NULL | |
| val_hashed | char(50) | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
以下查询在0.00秒内完成:
SELECT * FROM hashes ORDER BY 1 DESC LIMIT 1;
但是,此查询需要3分17秒:
SELECT val FROM hashes ORDER BY 1 DESC LIMIT 1;
我看到查询运行时,进程列表将其显示为status Sorting result
。这种情况是完全可以重现的。请注意,还有另一个进程INSERT
在表上连续执行操作。
为什么更具体的查询要比查询花费更长的时间*
?我一直认为*
出于性能原因应避免查询。
该
—
usr
ORDER BY NUMBER
语法是相当容易出错。
添加到您的最后一条评论中,
—
lc。
SELECT *
再加上一个列索引,ORDER BY
混淆了要对哪个列进行排序-避免出现以下问题*
的另一个原因
@lc。,什么意思?
—
和平者
@Pacerier我的意思
—
LC。
*
是不明确。所以说:“给我所有的列和排序第三个”讲述的是确定性的话说:“去超市,并告诉了我很多的流量如何点亮你通过”
id
来查找第一行。第二个需要在(未索引)val
列上对完整结果进行排序。