mysql 基礎查詢語句,MySQL中一條排序語句order?
MySQL長期以來對索引的建立只允許正向asc存儲,就算建立了desc,也是忽略掉。
比如對于以下的查詢,無法發揮索引的最佳性能。
查詢一:select * from tb1 where f1 = ... order by id desc;查詢二:2. select * from tb1 where f1 = ... order by f1 asc , f2 desc;
那對于上面的查詢,尤其是數據量和并發到一定峰值的時候,則對OS的資源消耗非常大。一般這樣的SQL在查詢計劃里面會出現using filesort等狀態。
比如針對下面的表t1,針對字段rank1有兩個索引,一個是正序的,一個是反序的。不過在MySQL 8.0 之前的版本都是按照正序來存儲。
按照rank1 正向排序的執行計劃,
按照rank1 反向排序的執行計劃,
從執行計劃來看,反向比正向除了extra里多了Using temporary; Using filesort這兩個,其他的一模一樣。這兩個就代表中間用到了臨時表和排序,一般來說,凡是執行計劃里用到了這兩個的,性能幾乎都不咋地。除非我這個臨時表不太大,而用于排序的buffer也足夠大,那性能也不至于太差。那這兩個選項到底對性能有多大影響呢?