首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL优化-索引优化

今天我们来说一说索引优化。首先我们来说一说什么情况需要建立索引吧?

1.当使用不以通配符开始的like模糊查询时也可以使用索引,反之就不能使用索引了

Select * from table1 where username like ‘pack%’; # username字段会走索引

Select * from table1 where username like ‘%pack%’; # username字段不会走索引2,一个索引字段的前缀使用了order by或者group by时也会走索引:

Select * from table2 order by field1;

3.查找某个字段的最大值和最小值会走索引查询

Select min(score),max(score) from table4 where class_id = 1;

4.查询的列是后面字段的部分时间会走索引查询

Select time1 from table5 where time2 = ‘2017-2’;

接下来我们再来说一说联合索引吧?对于联合索引大家应该不陌生,但是使用过程中总觉得并没有使用到联合索引,现在我们就来分析一下其中的原因吧?

alter table tablename index(field1,field2,field3);

以上对表的三个字段,建立了一个联合索引,这种情况下怎样的SQL联合索引才生效:

Where field1 = 1; 生效

Where field1 = 1 and field2 =2; 生效

Where field1 = 1 and field2 =2 and field3 = 3;生效

Where field2 = 2; 不生效

Where field3 = 3; 不生效

Where field1 = 1 and field3 = 3;field1生效,field3不生效

Where field1 = 1 and field2 >2 and field3 = 3;field1和field2生效,field3不生效

Where field1 = 1 and field2 like‘pack%’and field3 = 3; field1和field2生效,field3不生效

最后我们再来说一说sql语句的优化吧?

1.能使用分页尽量使用分页查询

2.对分页进行优化

将Select * from table1 where order by id limit 2200 10;

改为Select * from table1 where id>2200 order by id limit 10;

这样就可以走id的主键索引了。

3.将Not in子查询使用left join查询代替

4.对于or条件查询的可以使用 union all来代替:

Select * from table1 where a = ‘123’ or b = ‘456’;

Select * from table1 where a = ‘123’ union all Select * from table1

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OUWpFZ7LGW5N-A_Buf_Wa30Q0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券