mysql如何創(chuàng)建索引 我要對mysql中的數(shù)據(jù)建立倒排索引應(yīng)該怎么?
我要對mysql中的數(shù)據(jù)建立倒排索引應(yīng)該怎么?MySQL長期以來對索引的建立只允許正向asc存儲,就算建立了desc,也是忽略掉。比如對于以下的查詢,無法發(fā)揮索引的最佳性能。查詢一:select *
我要對mysql中的數(shù)據(jù)建立倒排索引應(yīng)該怎么?
MySQL長期以來對索引的建立只允許正向asc存儲,就算建立了desc,也是忽略掉。
比如對于以下的查詢,無法發(fā)揮索引的最佳性能。
- 查詢一:
select * from tb1 where f1 = ... order by id desc
- 查詢二:
2. select * from tb1 where f1 = ... order by f1 asc , f2 desc
那對于上面的查詢,尤其是數(shù)據(jù)量和并發(fā)到一定峰值的時候,則對OS的資源消耗非常大。一般這樣的SQL在查詢計(jì)劃里面會出現(xiàn)using filesort等狀態(tài)。
比如針對下面的表t1,針對字段rank1有兩個索引,一個是正序的,一個是反序的。不過在MySQL 8.0 之前的版本都是按照正序來存儲。
按照rank1 正向排序的執(zhí)行計(jì)劃,
按照rank1 反向排序的執(zhí)行計(jì)劃,
從執(zhí)行計(jì)劃來看,反向比正向除了extra里多了Using temporary Using filesort這兩個,其他的一模一樣。這兩個就代表中間用到了臨時表和排序,一般來說,凡是執(zhí)行計(jì)劃里用到了這兩個的,性能幾乎都不咋地。除非我這個臨時表不太大,而用于排序的buffer也足夠大,那性能也不至于太差。那這兩個選項(xiàng)到底對性能有多大影響呢?
mysql in會使用索引嗎?
mysql in走索引的,可以測試下