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

2022-10-11 11:45:11 字數 1798 閱讀 8049

索引:

使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 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 key2 

論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 當使用不以萬用字元開...