1.什麼是索引
(1)索引就是目錄
為了查詢的速度增加,建立一個目錄(這也就意味着需要額外的開支)
一般在where字句後經常出現的字段。(通常在資料量超過10000條時使用)
沒有大量的DML語句(DML語句頻繁使用的時候,不适合建立索引)
(2)以二叉樹舉例來說明索引
索引相當于把表中的資料分區存放,用某個關鍵詞+關鍵詞對應的記錄的存儲位址(實體位址),以圖為例,查找Smith時,從king開始,向下向右,再向下向右,然後向下向左,找到Smith的實體位址,進而找到Smith;利用這種方式隻查找了少部分資料,大大減少了掃描範圍;
**注意:**如果有多個smith,則存放在一起,即一個’子樹’存放多個同名為Smith的對應的實體位址;
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICciV2dsQXYtJ3bm9CX0gTMx81dsQWZ4lmZf1GLlpXazVmcvwVZnFWbp1zczV2YvJHctM3cv1Ces0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwIzX39GZhh2csATMflHLwEzX4xSZz91ZsAzMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xCNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzIzMyUmYjljY1Q2NxIjNzYzXzEDMxUTMyAzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
2.對比建立索引和沒有建立索引
(1)沒建索引時預設全表掃描
explain select * from emp where ename='smith';
未建立索引時,途中type所示,為ALL,即全表查詢
(2)建立索引後,掃描的是目錄,大大減少了掃描的範圍
explain select * from temp where ename='smith';
建立索引後type顯示為ref,此時查找不在需要全表搜尋
3.建立索引
(1)複制一張表
create table temp as select * from emp;
create index name_index on temp(ename);
select * from emp where ename='smith';