久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql數據庫中使用索引技巧有哪些

140次閱讀
沒有評論

共計 1545 個字符,預計需要花費 4 分鐘才能閱讀完成。

這篇文章主要介紹了 mysql 數據庫中使用索引技巧有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

花 1 分鐘時間,了解聚集索引,非聚集索引,聯合索引,索引覆蓋。

舉例,業務場景,用戶表,表結構為:

t_user(
uid primary key,
login_name unique,
passwd,
login_time,
);

聚集索引(clustered index):聚集索引決定數據在磁盤上的物理排序,一個表只能有一個聚集索引,一般用 primary key 來約束。

舉例:t_user 場景中,uid 上的索引。

非聚集索引(non-clustered index):它并不決定數據在磁盤上的物理排序,索引上只包含被建立索引的數據,以及一個行定位符 row-locator,這個行定位符,可以理解為一個聚集索引物理排序的指針,通過這個指針,可以找到行數據。

舉例,查找年輕 MM 的業務需求:

select uid from t_user where age   18 and age   26;

age 上建立的索引,就是非聚集索引。

聯合索引:多個字段上建立的索引,能夠加速復核查詢條件的檢索

舉例,登錄業務需求:

select uid, login_time from t_user where 
login_name=? and passwd=?

可以建立 (login_name, passwd) 的聯合索引。

聯合索引能夠滿足最左側查詢需求,例如 (a, b, c) 三列的聯合索引,能夠加速 a | (a, b) | (a, b, c) 三組查詢需求。

這也就是為何不建立 (passwd, login_name) 這樣聯合索引的原因,業務上幾乎沒有 passwd 的單條件查詢需求,而有很多 login_name 的單條件查詢需求。

提問:

select uid, login_time from t_user where
passwd=? and login_name=?

能否命中 (login_name, passwd) 這個聯合索引?

回答:可以,最左側查詢需求,并不是指 SQL 語句的寫法必須滿足索引的順序(這是很多朋友的誤解)

索引覆蓋:被查詢的列,數據能從索引中取得,而不用通過行定位符 row-locator 再到 row 上獲取,即“被查詢列要被所建的索引覆蓋”,這能夠加速查詢速度。

舉例,登錄業務需求:

select uid, login_time from t_user where
login_name=? and passwd=?

可以建立 (login_name, passwd, login_time) 的聯合索引,由于 login_time 已經建立在索引中了,被查詢的 uid 和 login_time 就不用去 row 上獲取數據了,從而加速查詢。

末了多說一句,登錄這個業務場景,login_name 具備唯一性,建這個單列索引就好。

作業:

假設訂單有三種狀態:0 已下單,1 已支付,2 已完成

業務需求,查詢未完成的訂單,哪個 SQL 更快呢?

select * from order where status!=2
select * from order where status=0 or status=1
select * from order where status IN (0,1)
select * from order where status=0
union
select * from order where stauts=1

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“mysql 數據庫中使用索引技巧有哪些”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計1545字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 息烽县| 涡阳县| 连江县| 淳安县| 黄冈市| 大竹县| 偃师市| 砀山县| 繁昌县| 克东县| 庐江县| 怀来县| 石泉县| 利津县| 磐石市| 岐山县| 富阳市| 青川县| 宁海县| 化州市| 观塘区| 新泰市| 织金县| 黑山县| 宁远县| 图片| 嵊泗县| 邵东县| 赤壁市| 文山县| 裕民县| 乌拉特中旗| 彭州市| 印江| 朝阳区| 威信县| 温泉县| 宜宾县| 万载县| 高平市| 屏山县|