一些常见的【MYSQL优化】总结(二)

1、使用合理的分页方式提高分页的效率

使用常用的limit 进行分页的时候,我们会发现,随着数据量的增加,直接使用limit分页会越来越慢。
这时候我们可以使用上一页的最大的id然后用这个最大的id限制下一页的起点,比如在上一页的最大id是133211,sql可以写作

SELECT id FROM table WHERE id > 133211 limit 20

2、避免在WHERE语句中对字段进行null值的判断

对null的判断会导致引擎放弃使用索引从而进行全表扫描

3、不建议使用%进行前缀模糊查询

例如 LIKE “%name” 或者 LIKE “%name%”,这样的查询会导致索引失效而进行全表扫描,但是可以使用LIKE “name%”。
如果业务中必须用到%name%的时候,我们可以使用全文索引
创建全文索引的语法是:

ALTER TABLE 'table_name' ADD FULLTEXT INDEX `idx_user_name` (`user_name`);

使用全文索引的语法是:

SELECT id FROM table_name WHERE match(user_name) against('zhansan' in booleanmode);

注意:在需要创建全文索引之前,需要与DBA确认能否创建,使用时注意语法

4、避免在WHERE字与句中对字段进行表达式操作

比如:

SELECT id FROM table_name WHERE AGE * 2 > 35;

这样会造成引擎放弃使用索引,可以改为

SELECT id FROM table_name WHERE AGE > 35 / 2;

5、避免隐式类型转换

6、使用联合索引时,要遵守最左前缀法则

比如联合索引包含字段id,name,age,可以直接使用id字段,也可以使用id,name这样的顺序,蛋name,age都无法使用这个索引,所以在创建和使用联合索引的使用一定要注意字段的顺序,最常用的放在最前面。

7、必要的时候可以使用force index来强制查询走某个索引

8、对于联合索引来说,如果存在范围查询,比如 between,>,<等条件时,回造成后面的索引字段失效。

9、关于JOIN的优化

  • A LEFT JOIN B;A表为驱动表
  • A INNER JOIN B;MYSQL会自动找出数据少的表作为驱动表
  • A RIGHT JOIN B; B表为驱动表
    尽量使用INNER JOIN,避免LEFT JOIN
    合理利用索引,被驱动表的索引字段作为ON的限制字段。
    利用小表驱动大表;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值