MySQL索引失效与优化

索引失效:

1、索引字段上使用( != 、 <>、is null、is not null )判断时,索引会失效,而转向全表扫描。

2、索引字段上使用通配符(%)开头,索引会失效,而转向全表扫描。

3、索引字段是字符串,但查询时不加单引号,索引会失效,而转向全表扫描。

4、索引字段使用or时,索引会失效,而转向全表扫描。

查询优化:

1、复合索引尽量全匹配。

2、最佳左前缀法则(带头索引不能死,中间索引不能断)。

3、不在索引上做任何操作。

4、不能继续使用索引中范围条件右边的列。

5、尽量使用覆盖索引。

6、innodb主键推荐使用自增列(主键建立聚簇索引,主键不应该被修改。字符串不应该做索引)(理解innodb的索引保存结构就知道了);不用外键(由程序保证约束)

7、不用select * (消耗cpu,io,内存,带宽而且不具有扩展性)

8、or改写成in(在字段没有索引的情况下性能差别较大)

9、or改成union(索引无效变有效)

10、使用union all替代union(union有去重开销,例如分表操作)

11、少用连接join(超过3个join,一般移到业务代码里执行)

12、分页limit优化(偏移量越大,执行越慢)

mysql优化:

1、针对百万数量级,放弃在mysql中的join操作,推荐分别根据索引单表取数据,然后在程序里面做join,merge操作。

2、尽量使用nosql,例如redis,memcached等来缓存热点数据,从而缓解mysql压力。

总体优化:

1、不在数据库做运算,运算务必移至业务层。

2、库命名简洁明确(长度不能超过30个字符)

3、控制列数量(字段少而精,字段数简易在20以内)

4、平衡范式与冗余

5、拒绝3B(拒绝大sql:big sql、拒绝大事务:big transaction、拒绝大批量:big batch)

字段类优化

1、用好数值类型(用和是的字段类型节约空间)

2、字符转化为数字

3、避免使用null字段(null字段很难查询优化、null字段的索引需要额外空间、null字段的复合索引无效)

4、少用text类型(尽量使用varchar代替text字段)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值