數據庫索引詳解
- 索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。
如何選擇合適的列建立索引
- 從where從句中,group by從句中,order by從句中,on從句中,select列中,還可以建立覆蓋索引(也就是指索引包含所有查詢的列,直接查索引就可以完成任務的)。
- 索引字段越小越好,因為mysql存儲是以頁為單位的,如果從單頁中獲取更多的結果,減少IO操作,那麼就起到了積極的作用。
- 離散程度越高的列放在聯合索引的前面,因為離散度越大的列可選擇性越高,可以通過count統計函數查看離散度 離散度: distinct 值越大,唯一值越多,它的離散度越高,可選擇性越高。
索引抑制
- 索引抑制是指特定的關聯條件導致一些索引無法使用,從而導致SQL執行計劃效率較低。
- 常見的5種索引抑制情況:
- 使用不等於運算符
- 使用IS NULL 或 IS NOT NULL
- 使用LIKE(不支持左模糊 like '%xx')
- 使用函數,如:TRUNC
- 關聯條件存在隱式轉換(不匹配的數據類型)
創建索引的語法
- 創建一個普通的索引(一個最簡單的索引 沒有任何限制)
方式1: create index indexname on tableName(columnName(length));
方式2:alter tableName add index [indexName] on (columnName(length));
方式3: create table mytable(id int not null,username varchar(16) not null,
index [indexName](columnName(length)));
- 刪除索引
drop index [indexName] on tableName;
- 唯一索引(索引列的值必須唯一,但可以為null;如果是多個字段組合索引,那麼列值得組合唯一)
方式1:CREATE UNIQUE INDEX indexName ON tableName(columnName(length))
方式2:ALTER tableName ADD UNIQUE [indexName] ON (columnName(length))
方式3:CREATE TABLE tableName( ID INT NOT NULL, username VARCHAR(16) NOT
NULL, UNIQUE [indexName] (columnName(length)) );
- 主鍵索引 : primary key
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。