考虑一个值和哈希表,如下所示:
+------------+----------+------+-----+---------+----------------+
| 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列上对完整结果进行排序。