欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
mysql索引之七:組合索引中選擇合適的索引列順序

組合索引(concatenated index):由多個(gè)列構成的索引,如create index idx_emp on emp(col1, col2, col3, ……),則我們稱(chēng)idx_emp索引為組合索引。

在組合索引中有一個(gè)重要的概念:引導列(leading column),在上面的例子中,col1列為引導列。當我們進(jìn)行查詢(xún)時(shí)可以使用”where col1 = ? ”,也可以使用”where col1 = ? and col2 = ?”,這樣的限制條件都會(huì )使用索引,但是”where col2 = ? ”查詢(xún)就不會(huì )使用該索引。所以限制條件中包含先導列時(shí),該限制條件才會(huì )使用該組合索引。

創(chuàng )建2張測試表:

mysql> desc test1;+-------+--------------+------+-----+---------+-------+| Field | Type         | Null | Key | Default | Extra |+-------+--------------+------+-----+---------+-------+| id    | int(11)      | NO   |     | NULL    |       || name  | varchar(45)  | YES  | MUL | NULL    |       || dept  | varchar(50)  | YES  |     | NULL    |       || desc  | varchar(100) | YES  |     | NULL    |       |+-------+--------------+------+-----+---------+-------+4 rows in set (0.00 sec)mysql> desc test2;+---------+-------------+------+-----+---------+-------+| Field   | Type        | Null | Key | Default | Extra |+---------+-------------+------+-----+---------+-------+| id      | int(11)     | NO   | PRI | NULL    |       || email   | varchar(50) | YES  |     | NULL    |       || address | varchar(50) | YES  |     | NULL    |       |+---------+-------------+------+-----+---------+-------+3 rows in set (0.00 sec)mysql> 

 

通過(guò)存儲過(guò)程模擬一些數據:

delimiter $$create procedure mock_insert_test1()BEGIN    DECLARE v int DEFAULT 1;    WHILE v < 800000    DO        INSERT into test1        VALUES(v,CONCAT('name',v),CONCAT('dept',v),NULL);        SET v = v + 1;    END WHILE;end$$delimiter ;delimiter $$create procedure mock_insert_test2()BEGINDECLARE v int DEFAULT 1;WHILE v < 800000DOINSERT into test2VALUES(v,CONCAT('email',v),CONCAT('addr',v));SET v = v + 1;END WHILE;end$$delimiter ;

執行存儲過(guò)程灌一些數據,

mysql> SELECT * from test1 limit 10;+----+----------+-------+------+| id | name     | dept  | desc |+----+----------+-------+------+|  1 | duan     | yanfa | NULL ||  2 | zhangsan | renli | NULL ||  3 | lisi     | renli | NULL ||  1 | name1    | dept1 | NULL ||  2 | name2    | dept2 | NULL ||  3 | name3    | dept3 | NULL ||  4 | name4    | dept4 | NULL ||  5 | name5    | dept5 | NULL ||  6 | name6    | dept6 | NULL ||  7 | name7    | dept7 | NULL |+----+----------+-------+------+10 rows in set (0.00 sec)mysql> 

 

引導列是id時(shí),索引是這樣的:inx_id_name:id,name

創(chuàng )建索引后,

 結果:

引導列是name時(shí),索引是這樣的:

結果:

為什么要以name為引導列?因為ID是join列,并且ID列上面沒(méi)過(guò)濾條件,如果以ID列作為引導列,由于沒(méi)過(guò)濾條件那么CBO只能走 index full scan,或者index fast full scan,因為引導列沒(méi)過(guò)濾條件,走不了index range scan,  最多走index skip scan,不過(guò)index skip scan代價(jià)過(guò)高,因為index skip scan要求 引導列選擇性很低,但是ID這里選擇性很高。

如果name列作為引導列,那么優(yōu)化器就可以選擇index range scan,這樣相比index full scan, index fast full scan肯定要少掃描很多leaf block,邏輯讀就會(huì )相對較少。 

 

其實(shí)到這里,是否可以總結一下建立組合索引的原則總結:

  1. 引導列要選擇過(guò)濾條件的列作為引導列,比如 where a.xxx='xxx' 或者 a.xxx> 或者 a.xxx<  
  2. 引導列的選擇性越高越好,因為選擇性越高,掃描的leaf block就越少,效率就越高  (正確的順序依賴(lài)于使用該索引的查詢(xún),并且同時(shí)需要考慮如何更好的滿(mǎn)足排序和分組的需要。在一個(gè)多列B-Tree索引中,索引列的順序意味著(zhù)索引首先按照最左列進(jìn)行排序,其次是第二列。所以,索引可以按照升序或者降序進(jìn)行掃描,以滿(mǎn)足精確符合列順序的ORDER BY、GROUP BY和DISTINCT等子句的查詢(xún)需求。對于如何選擇索引順序有一個(gè)經(jīng)驗法則:將選擇性較高的列放到索引的最前列。)
  3. 盡量把join列放到組合索引最后面  

 

  

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Mysql數據庫性能優(yōu)化一
? Mysql數據庫的優(yōu)化技術(shù)
?MySQL的 select 和 sort 變量
MYSQL進(jìn)階-索引的組合索引
mysql索引筆記
mysql索引空間太大
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久