分析查詢語句是否用到了索引
explain sql語句\G
//根據返回的信息,我們可知,該sql語句是否使用索引,從多少記錄中取出,可以看到排序的方式.
主要是看
key 實際用到的索引
rows 從多少行中找出數據
37萬條的數據
不加索引的情況下 查詢要2秒多
具體我們來分析這個sql語句 看看他是從多少行數據中找到這些數據的
檢索了32w條數據才找到這些數據
下面是加上索引以后
加了普通索引以后只花了0.173s
通過分析發現用了我剛剛創建的索引 並在161行數據中找到了 數據
索引的利弊
在加快查詢速度的同時 占用的磁盤空間也更大了 (用MyISAM引擎的話 會有一個文件專門放索引 如果一個比較大的表給一個字段加上索引 那么這個文件會變的非常大 )
當在修改數據時 增加數據時 寫入數據的同時也會寫入索引增加io密集化
如同樣大小的表 一個表打上了5個索引 一個表只有一個主鍵索引 我們來對比下他們新增一條數據所用的時間
1 有5個普通索引的表 新增一套數據用了0.55秒
2沒有普通索引只有一個主鍵索引的表 只用了不到0.1秒
在此聲明2張表除了索引不一樣 數據大小 數據結構 都是一樣的
相差7-8倍的寫入效率 如果在一個精彩寫入和變動的表中 這是多么大的差距 所以不要濫用索引(在此引出下一章內容 如何設計表是更利於設置索引 在設置最少的索引的情況下如何最大的利用)
l 在什么列上添加索引比較合適
① 在經常查詢的列上加索引.
② 列的數據,內容就只有少數幾個值,不太適合加索引.
③ 內容頻繁變化,不合適加索引