Sql优化常见方法

        sql会慢很重要的原因就是索引失效,所以在写sql的时候就要注意避免索引失效的情况发生,一般分为以下几点:

        1、在表中建立索引的时候,要优先考虑where、group by使用到的字段;

        2、避免使用select *,可以用具体的字段代替 * ;

        3、避免使用in和or,in可以用between代替,比如select name from t where id in (2,3),可以替换成select name from t where id between 2 and 3。or可以用union代替,比如select name from t where id = 1 or id = 3,可以替换成select name from t where id = 1 union select name from t where id = 3;

        4、避免在字段开头进行模糊查询,比如select id from t where username like '%华';

        5、避免在where条件等号左侧进行表达式和函数操作,比如select id from t where score - 10 = 1,将表达式和函数操作移动到等号右侧;

        6、避免进行null值的判断,比如select name from t where score is null,应该给字段添加默认值,对默认值进行判断,比如select name from t where score = 0;

        如果不避免以上操作,都会导致数据库引擎放弃索引进行全表扫描。

        除了避免索引失效的情况发生之外,如果执行sql的时候发现很慢,也可以通过explain 加 sql语句的方式进行sql优化。

        通过explain + sql语句查看sql执行计划,explain查出来的字段含义:

        1、type:意思是sql的执行速度,包括all(全表扫描)、index(全索引扫描,即遍历索引树获取数据,效率比全表扫描好一些)、range(表示利用索引查询的时候限制了查询范围,在指定的范围进行查询,比如=、<、>、in null、between、like、in() )、ref(使用非唯一性的索引进行查询,非唯一性的索引就是允许被索引的字段有重复值)、const(这个表里面最多只有一行记录匹配)。(一般要保证type到range级别,最好到ref)

        2、key:当前用到的索引,可以通过更改索引判断哪个索引速度更快,一般用force index强制执行指定索引;

        3、table:当前执行的表名;

        4、rows:查询数据的预估值,可以看看是否查询过多数据。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值