論MySQL何時使用索引,何時不使用索引

2021-10-07 14:35:29 字數 2758 閱讀 4560

索引:

使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓(name)列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。

索引是乙個單獨的、物理的資料庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。

索引提供指向儲存在表的指定列中的資料值的指標,然後根據您指定的排序順序對這些指標排序。資料庫使用索引的方式與您使用書籍中的索引的方式很相似:它搜尋索引以找到特定值,然後順指標找到包含該值的行。

注意:並非所有的資料庫都以相同的方式使用索引。作為通用規則,只有當經常查詢索引列中的資料時,才需要在表上建立索引。索引占用磁碟空間,並且降低添 加、刪除和更新行的速度。在多數情況下,索引用於資料檢索的速度優勢大大超過它的不足之處。但是,如果應用程式非常頻繁地更新資料或磁碟空間有限,則可能 需要限制索引的數量。

可以基於資料庫表中的單列或多列建立索引。多列索引使您可以區分其中一列可能有相同值的行。

如果經常同時搜尋兩列或多列或按兩列或多列排序時,索引也很有幫助。例如,如果經常在同一查詢中為姓和名兩列設定判據,那麼在這兩列上建立多列索引將很有意義。

確定索引的有效性:

mysql何時使用索引

對乙個鍵碼使用》, >=, =, <, <=, if null和between

select * from table_name where key_part1=1 and key_part2 > 5; 

select * from table_name where key_part1 is null; 

當使用不以萬用字元開始的like

select * from table_name where key_part1 like 'jani%' 

在進行聯結時從另乙個表中提取行時

select * from t1,t2 where t1.col=t2.key_part 

找出指定索引的max()或min()值

select min(key_part2),max(key_part2) from table_name where key_part1=10 

乙個鍵碼的字首使用order by或group by

select * from foo order by key_part1,key_part2,key_part3 

在所有用在查詢中的列是鍵碼的一部分時間

select key_part3 from table_name where key_part1=1 

mysql何時不使用索引

如果mysql能估計出它將可能比掃瞄整張表還要快時,則不使用索引。例如如果key_part1均勻分布在1和100之間,下列查詢中使用索引就不是很好:

select * from table_name where key_part1 > 1 and key_part1 < 90 

如果使用heap表且不用=搜尋所有鍵碼部分。

在heap表上使用order by。

如果不是用鍵碼第一部分

select * from table_name where key_part2=1 

如果使用以乙個萬用字元開始的like

select * from table_name where key_part1 like '%jani%' 

搜尋乙個索引而在另乙個索引上做order by

select * from table_name where key_part1 = # order by key

增加註明:當查詢條件字段相同時,使用or範圍查詢索引可以執行,反之,索引失效。

例如:select * from table_name where name= "a"  or  name="b";(生效)

select * from table_name where name= "a"  or  ***="男";(失效)

誤區

1.並不是在where條件常用的列上加上索引,一條語句只會走乙個索引。

2.在多列建立索引,查詢哪一列,都將發揮作用? 滿足左字首要求

聯合索引   index(a1,a2,a3)

where a=1                        (生效)

where a=1 and where a2=2               (生效)

where a=1 and where a2=2 and where a3=3              (生效)

where a=2        where a3=3                                               (不生效)

where a=1 and where a2>2 and where a3=3                      (a1,a2生效,a3不生效)

where a=1 and where a2 like 'jay%' and where a3=3          (a1,a2生效,a3不生效)

sql優化

1.limit分頁優化

2.聚集索引:主鍵、沒有主鍵則定位第乙個唯一索引(所有行的值非空)、如果上2個條件都不滿足則自動產生乙個6位元組的id聚集索引。

3.輔助索引:包含鍵值的書籤,會儲存書籤資料。

4.count(*)   改為輔助索引。

**(

論MySQL何時使用索引,何時不使用索引

論mysql何時使用索引,何時不使用索引 索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 name 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。索引是乙個單獨的 物理的資料庫結...

論MySQL何時使用索引,何時不使用索引

索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 name 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資訊。索引是乙個單獨的 物理的資料庫結構,它是某個表中一列或若干列值的集合和相應...

MySQL何時使用索引 何時不使用索引

mysql何時使用索引 對乙個鍵碼使用 if null和between select from table name where key part1 1 and key part2 5 select from table name where key part1 is null 當使用不以萬用字元開...