mysql索引的创建和使用

索引:其实是根据我们的数据库结构抽取的另外一个映射我们数据类型的数据结构,一般实现了B-Tree或B+查询算法来快速定位到我们数据库的信息的结构,速度快,但并不是所有的查询都用索引,这个需要根据实际场景业务需求而定!
创建索引:
CREATE INDEX s2 ON s1(id)   在id上面创建名称为s2的索引
s2:索引名称
s1:创建索引的表
id:创建索引的列
查看执行计划:


索引分类:
PRIMARY, INDEX, UNIQUE 这3种是一类
PRIMARY 主键。 就是 唯一 且 不能为空。
INDEX 索引,普通的
UNIQUE 唯一索引。 不允许有重复。
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。
可以看到已经使用了id列的索引,由于之前已经创建了s1的索引,后又创建的了s2的索引,执行计划选择的时候(possible_keys可能使用的索引)就可能选择id的PRIMARY索引,也可能选择创建的普通index的s1或s2索引,key列显示而实际选择的用的是PRIMARY索引

以下就是用到了自定义的索引




禁用select *使用selectcount(*) 统计行数
尽量少运算尽量避免全表扫描,如果可以,在过滤列建立索引
尽量避免在where子句对字段进行null判断
尽量避免在where子句使用!= 或者<>
尽量避免在where子句使用or连接
尽量避免对字段进行表达式计算
尽量避免对字段进行函数操作
尽量避免使用不是复合索引的前缀列进行过滤连接
尽量少排序,如果可以,建立索引
尽量少join尽量用join代替子查询(子查询会建临时表,然后销毁临时表,join不创建临时表,速度比子查询稍快)
尽量避免在where子句中使用in,notin或者having,使用exists,notexists代替
尽量避免两端模糊匹配 like %***%
尽量用union all代替union
尽量早过滤避免类型转换
尽量批量insert优先优化高并发sql,而不是频率低的大sql


联合索引:




使用OR关键词联合索引不生效
使用where关键词需使用最左边的索引列(id),创建的索引才会生效


  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值