MySQL通過索引優化查詢

一、索引是什麼
索引通俗來講就相當於書的目錄,當我們根據條件查詢的時候,沒有索引,便需要全表掃描,數據量少還可以,一旦數據量超過百萬甚至千萬,一條查詢sql執行往往需要幾十秒甚至更多,5秒以上就已經讓人難以忍受了。提升查詢速度的方向一是提升硬件(內存、cpu、硬盤),二是在軟件上優化(加索引、優化sql;優化sql不在本文闡述範圍之內)。
能在軟件上解決的,就不在硬件上解決,畢竟硬件提升代碼昂貴,性價比太低。代價小且行之有效的解決方法就是合理的加索引。索引使用得當,能使查詢速度提升上萬倍,效果驚人。
二、索引的語法:
查看某張表的索引:SHOW INDEX FROM 表名;
創建普通索引:ALTER TABLE 表名 ADD INDEX 索引名 (加索引的列)
創建聚合索引:ALTER TABLE 表名 ADD INDEX 索引名 (加索引的列1,加索引的列2)
刪除某張表的索引:DROP INDEX 索引名 ON 表名;(在學習階段使用數據庫可視化工具,一般直接在界面中創建索引,很少使用命令行創鍵)
三、EXPLAIN 分析SQL執行的狀態
EXPLAIN列的解釋
table:顯示這一行的數據是關於哪張表的
type :這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型爲const、eq_reg、ref、range、indexhe和ALL
possible_keys:顯示可能應用在這張表中的索引。如果爲空,沒有可能的索引。可以爲相關的域從WHERE語句中選擇一個合適的語句
key:實際使用的索引。如果爲NULL,則沒有使用索引。
key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數
rows:MySQL認爲必須檢查的用來返回請求數據的行數
Extra :關於MySQL如何解析查詢的額外信息。
四、性能測試
(1)主鍵索引
在平常的查詢中,我們可以感受到,使用主鍵爲條件的查詢速度很快,正是在創鍵主鍵時已經將主鍵變成了主鍵索引。
(2)普通索引

SELECT * FROM app_savedata WHERE province_zipcode = 620000

未添加索引前
在這裏插入圖片描述
添加索引(province_zipcode)後
在這裏插入圖片描述
(3)聯合索引

SELECT * FROM app_savedata WHERE province_name = '山東省' and city_name = '臨沂'

未添加組合索引前
在這裏插入圖片描述
添加 province_name, city_name 聯合索引後
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章