索引操作

2018-01-23 10:48 更新

一、什么事索引

    索引就是一張保存了主鍵和索引字段的數(shù)據(jù)表。

    未命名文件

    該圖是數(shù)據(jù)庫(kù)針對(duì)myisam和innodb兩種存儲(chǔ)引擎在數(shù)據(jù)存儲(chǔ)上面的結(jié)構(gòu)圖,從myisam中可以看出,是把我們的索引單獨(dú)存儲(chǔ)到一個(gè)文件中,在查詢的時(shí)候直接查詢索引即可。

二、為什么使用索引

    優(yōu)點(diǎn):快速、高效檢索。如全文檢索。

    弊端:過(guò)多的索引也會(huì)減低更新表的速度,如我們?cè)诓僮鱥nsert、update、delete時(shí),我們不僅要向?qū)嶓w表中操作,還需要向索引表進(jìn)行操作。還會(huì)過(guò)多的暫用磁盤的存儲(chǔ)空間。

三、索引分類

    單列索引:在創(chuàng)建索引時(shí),索引中只有一個(gè)字段。一張表中可以有多個(gè)單列索引(主鍵索引,唯一索引,普通索引,全文索引)。

    多列索引:在創(chuàng)建索引時(shí),索引中有多個(gè)字段。

四、語(yǔ)法格式

    1.在表外直接創(chuàng)建索引

CREATE INDEX indexName ON mytable(column(length)); 

    2.創(chuàng)建表時(shí)在表的結(jié)構(gòu)中添加索引

CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (column(length))  
 
); 

    3.刪除索引

DROP INDEX [indexName] ON mytable; 

五、什么時(shí)候使用索引

  1. 使用like時(shí),后面為常量,要是%不在第一個(gè)字符中此時(shí)索引才會(huì)生效。例如,like '%5';此時(shí) 是不生效的。
  2. 進(jìn)行大文本搜索時(shí),使用全文檢索而不是用'%?%'。
  3. 列名為索引時(shí),使用colum-name is null ,而column-name is not null 是沒(méi)有使用到索引

六、什么時(shí)候有索引但是沒(méi)用索引

  1. 使用索引比全盤掃描更慢。
  2. 使用memory/heap當(dāng)做存儲(chǔ)引擎時(shí),where條件沒(méi)有使用"="。
  3. 用or 或者 and 隔開條件時(shí),條件兩邊設(shè)置索引情況不一致。
  4. 查詢時(shí),where條件給的數(shù)據(jù)類型與字段的類型不一致。

七、 檢索索引使用狀況

    show status like "hanlder_read%";

    查詢出來(lái)的hanlder_read_rnd_next的值越高,則效率越低。



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)