SQL查询优化

SQL查询优化

主要针对SQL查询的优化介绍:

  1. 慢查询
  2. 索引
  3. 拆分表

全文索引

主要是针对文件、文本的检索,比如文章。全文索引针对MyISAM有用。

select * from articles where match(title,body) against(database); 【可以】

唯一索引

unique空串(null)可以放多个。如果是具体的内容则不能重复。

  1. where条经常使用;
  2. 该字段的内容不是唯一的几个值(sex)(只有三个数据形成2级二叉树);
  3. 字段内容不是频繁变化。

查询优化

1. 尽量避免全表扫描,首先应考虑在 where order by 涉及的列上建立索引。

2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。

3. 应尽量避免在 where 子句中使用 != <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

4. 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描:可以使用联合查询 union all

5. in not in 也要慎用,否则会导致全表扫描,在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。

6. 模糊查询like,关键词%yue%,由于yue前面用到了“%”,因此该查询必然要进行全表扫描,除非必要,否则不要在关键词前加%;“yue%”进行索引。

7. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

如:select id from t where age/2 = 10

应改为:select id from t where num = 10*2

8. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描

不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。如:

select id from t where substring(name,1,3) = abc #nameabc开头的id

select id from t where datediff(day,createdate,2019-03-09) = 0 #2019-03-09 --生成的id

应改为:

select id from t where name like 'abc%'

select id from t where createdate >= '2019-03-09' and createdate < '2019-03-10'

9. 在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致

10. having比较,尽量使用where ,where 先过滤(数据就少了)在分组

11. 理论上,尽量使用多表连接(join)查询(避免子查询)

12. 尽量使用列名,不要使用*

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值