查詢語句的執行計畫
explain
從低到高的順序:
all(全表掃瞄)、【避免】
index(全索引掃瞄)【避免】
range範圍掃瞄
ref非唯一索引掃瞄、
eq_ref唯一索引掃瞄
const結果只有一條的主鍵或唯一索引掃瞄
[索引失效]
1索引列上做了計算 函式 型別轉換等操作
2like匹配使用了字首匹配符"%ab"
3字串不加引號導致型別轉換
查詢過程需要掃瞄整個索引並回表,代價高於直接全表掃瞄
可能出現全表掃瞄(索引列上用了!= >= <= or in,索引列上用了 is null is not null)
強制走索引:
select * from student force index(『index_name』)where name>='rose'
如何建立高效索引
建立字首索引
create index on student index_name_pre(name(5))
建立覆蓋索引
(覆蓋索引是sql 中query的所有字段,在索引b+tree的葉子節點上都能找到那些索引)
聯合索引
最左匹配準則
區分度大的字段排在前面(distinct(column/count(*)))
join order by group by
join
參與join的字段上一般需要加上索引
提倡盡量結合現有的索引字段進行order by操作 盡量避免低效的檔案排序操作
group by如果能夠依賴索引完成,則不需要額外的臨時表
索引的缺德
1 索引會帶來資料寫入延遲
2 索引會引入額外的空間損耗
3索引能提公升查詢效率的場景有限
大資料下 要進行讀寫分離 分庫分表等方案
mysql索引的建立和查詢語句優化
300w條的模擬資料 並且沒有建立任何索引 以id查詢的 4秒多 以email查詢的 4秒多 建立後再查詢 以id查不到1秒,所以索引要建立正確且查詢條件得適合 create index email index on s1 email 建立後查詢 瞬間快了非常多 建立索引為了提高查詢的效率,建立正確...
mysql建立和刪除索引
摘自 longkm的部落格 建立和刪除索引 索引的建立可以在create table語句中進行,也可以單獨用create index或alter table來給表增加索引。刪除索引可以利用alter table或drop index語句來實現。1 使用alter table語句建立索引。語法如下 a...
mysql建立和刪除索引
2 索引作用 在索引列上,除了上面提到的有序查詢之外,資料庫利用各種各樣的快速定位技術,能夠大大提高查詢效率。特別是當資料量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快 成千上萬倍。例如,有3個未索引的表t1 t2 t3,分別只包含列c1 c2 c3,每個表分別含有1000行資料組成,指為...