學習筆記(十) 索引的應用技巧和注意事項

2022-08-30 07:21:11 字數 2753 閱讀 2025

學習筆記(十)——索引的應用技巧和注意事項

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(

firstnameasc)

//建立姓的非聚集索引

createnonclusteredindexlnameondimcustomer(

lastnameasc)

//建立名的非聚集索引

2、為一張表建立主鍵(**)

altertabledimproduct

adocomstraint

pk_dimproduct_productkey

primary (productkey);

查詢產品英文名為jam的產品資訊(**)

selectp.*fromdimproductasp

wherep.englishproductnamelike

'%jam%

'

開銷如下:

②查詢產品英文名為jam的產品資訊(**)

有上述兩個開銷結果可以看出來,如果進行了運算,索引就沒沒辦法從獲益;

優化結果:應當使用and等進行連線,進行優化,避免使用計算。

3、

select        

o.salesordernumber

,o.salesorderdetailid

from

tb_customer2asc

jointb_order2asoonc.id=o.customerid

where

c.city='

chicago

';//

合併迴圈

c.city='

paris

';//

巢狀迴圈

4、索引的更新以及刪除都會產生內部碎片,這樣的碎片往往難以填充,新的索引大小要是大有碎片的大小,就會導致索引拆分頁

外部的碎片主要由兩種,一種是邏輯順序和物理順序不一致,還有一種是索引頁不連續

例如:

selecttop 45

o.*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。可以理解為排好序的快速...