c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引
原創(chuàng)作者:楊濤濤
我們今天來介紹下 MySQL 8.0 引入的新特性:倒序索引。
MySQL長期以來對(duì)索引的建立只允許正向asc存儲(chǔ),就算建立了desc,也是忽略掉。
比如對(duì)于以下的查詢,無法發(fā)揮索引的最佳性能。
- 查詢一:
- 查詢二:
那對(duì)于上面的查詢,尤其是數(shù)據(jù)量和并發(fā)到一定峰值的時(shí)候,則對(duì)OS的資源消耗非常大。一般這樣的SQL在查詢計(jì)劃里面會(huì)出現(xiàn)using filesort等狀態(tài)。
比如針對(duì)下面的表t1,針對(duì)字段rank1有兩個(gè)索引,一個(gè)是正序的,一個(gè)是反序的。不過在MySQL 8.0 之前的版本都是按照正序來存儲(chǔ)。
按照rank1 正向排序的執(zhí)行計(jì)劃,
按照rank1 反向排序的執(zhí)行計(jì)劃,
從執(zhí)行計(jì)劃來看,反向比正向除了extra里多了Using temporary; Using filesort這兩個(gè),其他的一模一樣。這兩個(gè)就代表中間用到了臨時(shí)表和排序,一般來說,凡是執(zhí)行計(jì)劃里用到了這兩個(gè)的,性能幾乎都不咋地。除非我這個(gè)臨時(shí)表不太大,而用于排序的buffer也足夠大,那性能也不至于太差。那這兩個(gè)選項(xiàng)到底對(duì)性能有多大影響呢?
我們分別執(zhí)行這兩個(gè)查詢,并且查看MySQL的session級(jí)的status就大概能看出些許不同。
通過以上兩張圖,我們發(fā)現(xiàn)反向的比正向的多了很多個(gè)計(jì)數(shù),比如通過掃描的記錄數(shù)增加了10倍,而且還伴有10倍的臨時(shí)表的讀和寫記錄數(shù)。那這個(gè)開銷是非常巨大的。那以上的查詢是在MySQL 5.7 上運(yùn)行的。
MySQL 8.0 給我們帶來了倒序索引(Descending Indexes),也就是說反向存儲(chǔ)的索引。 這里不要跟搜索引擎中的倒排索引混淆了,MySQL這里只是反向排序存儲(chǔ)而已。不過這個(gè)倒序存儲(chǔ)已經(jīng)解決了很大的問題。我們再看下之前在MySQL 5.7 上運(yùn)行的例子。
我們把數(shù)據(jù)導(dǎo)入到MySQL 8.0,
再把原來的索引變?yōu)榈剐蛩饕?#xff0c;
再次看下第二個(gè)SQL的查詢計(jì)劃,
很顯然,用到了這個(gè)倒序索引 idx_rank1_desc,而這里的臨時(shí)表等的信息消失了。
當(dāng)然了,這里的組合比較多,比如我這張表的字段rank1,rank2兩個(gè)可以任意組合。
組合一:
(rank1 asc,rank2 asc);- 組合二:
- 組合三:
- 組合四:
我把這幾個(gè)加上,適合的查詢比如:
- 查詢一:
- 查詢二:
- 查詢?nèi)?#xff1a;
等等,這里就不一一示范了。
歷期文章回顧
愛可生云數(shù)據(jù)庫:新特性解讀 | MySQL 8.0 新增 HINT 模式
愛可生云數(shù)據(jù)庫:新特性解讀 | MySQL 8.0 索引特性2-索引跳躍掃描
愛可生云數(shù)據(jù)庫:新特性解讀 | MySQL 8.0 索引特性1-函數(shù)索引
愛可生云數(shù)據(jù)庫:新特性解讀 | MySQL 8.0 通用表達(dá)式
總結(jié)
以上是生活随笔為你收集整理的c语言 字符串 正序再倒序_新特性解读 | MySQL 8.0 索引特性3 -倒序索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python缩进格式作用_关于自动缩进格
- 下一篇: pxe安装系统 ip获取错误_【图说】消