學習筆記(十)——索引的應用技巧和注意事項
1、建立包含列的非聚集索引(將空間上的優勢轉變成時間上的優勢)
建立**如下:
select*fromdimemployee;例如建立乙個客戶的名字非聚集索引createnonclusteredindexcustomernameondimcustomer
(customeralternatekeyasc)
include(lastname
,firstname)
createnonclusteredindexnameondimcustomer實際開銷結果如下:(lastnameasc
,firstnameasc)
//①查詢姓名的開銷(**)
selectc.*fromdimcustomerasc
wherec.firstname='
jon'andc.lastname='
yang
'
②查詢姓的開銷(**)
selectc.*fromdimcustomerasc
wherec.lastname='
yang
'實際開銷結果如下:
③查詢名的開銷(**)
selectc.*fromdimcustomerasc
wherec.firstname='
jon'
實際開銷為下面的結果:
對比三面的三個開銷結果,可以看得出來建立索引的查詢是有先來後到的,索引的查詢要包含前面的n列才能獲益
因此進行優化的結果應該是分別建立兩個索引,乙個代表姓,乙個代表名。(**如下)
createnonclusteredindexfnameondimcustomer(2、為一張表建立主鍵(**)firstnameasc)
//建立姓的非聚集索引
createnonclusteredindexlnameondimcustomer(
lastnameasc)
//建立名的非聚集索引
altertabledimproduct查詢產品英文名為jam的產品資訊(**)adocomstraint
pk_dimproduct_productkey
primary (productkey);
selectp.*fromdimproductasp開銷如下:wherep.englishproductnamelike
'%jam%
'
②查詢產品英文名為jam的產品資訊(**)
有上述兩個開銷結果可以看出來,如果進行了運算,索引就沒沒辦法從獲益;
優化結果:應當使用and等進行連線,進行優化,避免使用計算。
3、
selecto.salesordernumber
,o.salesorderdetailid
from
tb_customer2asc
jointb_order2asoonc.id=o.customerid
where
c.city='
chicago
';//
合併迴圈
c.city='
paris
';//
巢狀迴圈
4、索引的更新以及刪除都會產生內部碎片,這樣的碎片往往難以填充,新的索引大小要是大有碎片的大小,就會導致索引拆分頁
外部的碎片主要由兩種,一種是邏輯順序和物理順序不一致,還有一種是索引頁不連續
例如:
selecttop 45o.*from
dimproductaso
where
o.productkey%2=1
;
dbccind查詢結果如下:('adventureworksdw2008r2',
'dimproduct',
1);
學習筆記 索引的應用技巧和注意事項
1 建立包含列的非聚集索引 1 select fromdimemployee 2createnonclusteredindexcustomernameondimcustomer 3 customeralternatekeyasc 4include lastname 5 firstname 例如建立乙...
mysql學習筆記(十)索引
索引 乙個索引是儲存的表中乙個特定列的值資料結構 最常見的是b tree 索引是在表的列上建立。所以,要記住的關鍵點是索引包含乙個表中列的值,並且這些值儲存在乙個資料結構中,索引是一種資料結構,一般是b tree mysql索引方法有幾種 mysql目前主要有以下幾種索引方法 b tree,hash...
MySQL學習筆記(十) MySQL索引
日期 2020 12 08 什麼是索引?索引 index 是幫助mysql高效獲取資料的資料結構,可以得到索引的本質。好處 提高查詢效率 索引需要維護,維護索引需要耗費時間,所以索引並不是越多越好。假如,如果我們需要查詢 mysql 首先要定位到m字母,然後再找到剩下的sql。可以理解為排好序的快速...