mysql 索引查询_mysql索引的建立和查询语句优化
首先表內(nèi)容展示:
# 300W條的模擬數(shù)據(jù)
# 并且沒有建立任何索引
不建立索引的查詢時(shí)間:
以id查詢的(4秒多):
以email查詢的(4秒多):
建立主鍵索引后:
alter table s1 modify id int primary key auto_increment;
建立后再查詢:
# 以id查不到1秒,所以索引要建立正確且查詢條件得適合
建立email字段的普通索引:
create index email_index on s1(email);
建立后查詢:
# 瞬間快了非常多
mysql的索引介紹:
建立索引為了提高查找的效率,建立正確索引,以及sql查詢語(yǔ)句正確,則可以提高用戶體驗(yàn)。
mysql的索引:
primary key? # 唯一 + 非空 + 聚集索引
unique key?? # 唯一 + 索引,輔助索引
index key??? # 普通索引,能夠加速查詢,輔助索引
foreign key? # 本身沒有索引的,但是它關(guān)聯(lián)的外表中的字段是unique索引
注:
(1) 主鍵作為條件的查詢?nèi)绻軌蜃屗饕敲葱士偸歉?/p>
(2) primary key 和unique 標(biāo)識(shí)的字段不需要再添加索引,直接就可以利用索引加速查詢
(3) 能用unique的時(shí)候盡量不用index,因?yàn)槠胀ㄋ饕梢允墙⒃偕杂兄貜?fù)的字段,但不可以重復(fù)過多的字段(大概重復(fù)10%以上不能建立普通索引了)
關(guān)于索引的建立和刪除:
# 最好在建表時(shí)候考慮好
添加主鍵:
alter table tablename add primary key(列名);
刪除主鍵:
alter table tablename drop primary key;
添加普通索引:
create index 索引名 on 表名(字段名);
刪除普通索引:
drop index 索引名 on 表名;
添加unique:
alter table 表名 add unique (字段);
刪除unique:
alter table 表名 drop index字段;
mysql的語(yǔ)句優(yōu)化:
(1) 查詢條件字段一定是建立了索引的,如果查詢的條件字段沒有創(chuàng)建索引,那么無(wú)效
(2) 查詢條件不能是一個(gè)范圍條件,隨著范圍值的增大,索引發(fā)揮的作用越小
如:select * from s1 where id > 10000 and email='eva99999@oldboy';? # 這個(gè)語(yǔ)句不太好
(3) 使用like模糊查詢,使用abc%形式可以命中索引,但是%abc%不能命中索引
如:
(4) 索引列不要在條件中參與計(jì)算,也不要使用函數(shù)
(5) 多個(gè)索引條件以and相連時(shí)候,優(yōu)先選擇區(qū)分度高的索引來進(jìn)行查詢
如:select * from s1 where id=999 and username='zezhou';
查看mysql語(yǔ)句的執(zhí)行計(jì)劃:
# 可以看到該sql語(yǔ)句命中索引的情況
格式:explain sql語(yǔ)句;
沒建立索引:
建立了索引后:
查看是否命中索引的例子:
總結(jié)
以上是生活随笔為你收集整理的mysql 索引查询_mysql索引的建立和查询语句优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 可以直接在C++里面写类似RSL的sha
- 下一篇: mysql5.7.24免安装版配置_my