自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一分鐘了解索引技巧

開發(fā) 開發(fā)工具
啥?被查詢字段也要建立到索引中?下面,我們就用1分鐘時間,了解聚集索引,非聚集索引,聯(lián)合索引,索引覆蓋。

花1分鐘時間,了解聚集索引,非聚集索引,聯(lián)合索引,索引覆蓋。

索引/查詢/SQL

舉例,業(yè)務(wù)場景,用戶表,表結(jié)構(gòu)為:

  1. t_user( 
  2. uid primary key, 
  3. login_name unique, 
  4. passwd, 
  5. login_time, 
  6. age, 
  7. … 
  8. ); 

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

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

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

舉例,查找年輕MM的業(yè)務(wù)需求:

  1. select uid from t_user where age > 18 and age < 26 

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

聯(lián)合索引:多個字段上建立的索引,能夠加速復(fù)核查詢條件的檢索

舉例,登錄業(yè)務(wù)需求:

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

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

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

這也就是為何不建立(passwd, login_name)這樣聯(lián)合索引的原因,業(yè)務(wù)上幾乎沒有passwd的單條件查詢需求,而有很多l(xiāng)ogin_name的單條件查詢需求。

提問:

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

能否***(login_name, passwd)這個聯(lián)合索引?

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

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

舉例,登錄業(yè)務(wù)需求:

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

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

末了多說一句,登錄這個業(yè)務(wù)場景,login_name具備***性,建這個單列索引就好。

作業(yè):

假設(shè)訂單有三種狀態(tài):0已下單,1已支付,2已完成

業(yè)務(wù)需求,查詢未完成的訂單,哪個SQL更快呢?

  1. select * from order where status!=2 
  2. select * from order where status=0 or status=1 
  3. select * from order where status IN (0,1) 
  4. select * from order where status=0 
  5. union 
  6. select * from order where stauts=1 

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2022-07-18 06:16:07

單點登錄系統(tǒng)

2020-07-09 07:37:06

數(shù)據(jù)庫Redis工具

2020-07-17 07:44:25

云計算邊緣計算IT

2017-03-30 19:28:26

HBase分布式數(shù)據(jù)

2022-06-02 08:46:04

網(wǎng)卡網(wǎng)絡(luò)服務(wù)器

2016-09-14 15:57:53

架構(gòu)分布式系統(tǒng)負載均衡

2020-05-21 19:46:19

區(qū)塊鏈數(shù)字貨幣比特幣

2018-06-26 05:23:19

線程安全函數(shù)代碼

2018-07-31 16:10:51

Redo Undo數(shù)據(jù)庫數(shù)據(jù)

2017-02-21 13:00:27

LoadAverage負載Load

2015-10-10 14:11:00

互聯(lián)網(wǎng)數(shù)據(jù)挖掘爬蟲

2020-01-30 11:26:17

QinQVLAN協(xié)議

2018-01-14 23:19:25

靜態(tài)動態(tài)互聯(lián)網(wǎng)

2017-12-26 16:24:36

接口代碼數(shù)據(jù)

2016-09-12 17:28:45

云存儲應(yīng)用軟件存儲設(shè)備

2018-12-12 22:51:24

Java包裝語言

2011-02-21 17:48:35

vsFTPd

2019-12-24 09:10:43

Ipv6IP址協(xié)議

2017-05-23 16:13:45

2015-11-12 10:32:40

GitHub控制系統(tǒng)分布式
點贊
收藏

51CTO技術(shù)棧公眾號