Mysql基础技能(三)

索引优化基础

MySQL只在认为走索引可以筛去85%以上数据的时候,才使用索引,如果达不到这个标准,索引是无意义的。

前缀索引:MySQL可以利用索引的前向部分,但不可以利用后向部分,不支持反向索引。

    例如:SELECT col2 FROM table WHERE col1=1;可以使用索引(col1,col2),但不可以使用(col2,col1).

不等比较的优化:如果索引的前向部分在WHERE中是等于,那么可以使用索引,如果索引的前向部分再WHERE中是不等比较,那么不可以为后面的等于比较使用索引

    例如:SELECT col1 FROM table WHERE col2=1 AND col3 >10;可以完全使用索引(col2,col3),但只可以使用(col3,col2)的前缀,

排序的优化:可以在条件是等于的时候继续使用索引排序,或者条件中的不等于字段就是排序字段。

    例如:SELECT col1 FROM table WHERE col2=1 AND col3>0 ORDER BY col3,可以完全使用索引(col2,col3)避免排序。但条件是col2<1 AND col3=0 ORDER BY col3时则只能使用col2排除记录,不可以用来排序。

GROUP BY/DISTINCT也是以排序为基础,优化同上。

 

chema设计优化

TEXT/BLOB字段分开单表存储与原表主键一一对应。

经常查询的字段与不经常查询的字段分开存储,用主键一一对应,例如帖子标题和内容。

频繁进行统计的SQL,可以转化为表存储,将查询压力分散到更新时。

频繁的对表进行count也可以转化为统计表存储。

 

SQL书写优化

尽量将子查询转化为链接查询,除非子查询只返回极少的记录。

不要在条件里写不必要的条件。

没有必要排序的分组采用ORDER BY null指定不排序。

OR条件若不能正确的走索引,则拆分为两条SQL。

不在乎重复的情况下,UNION ALL可以避免UNION要做的排序。

没必要的时候不要做外连接,内连接效率比外连接高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值