《高性能MYSQL》——查询总结

高性能MYSQL——查询总结

In

  • 通过EXPLANE可得知,in被解释为type:Range的查询;然而实际上其本质还是被转化为“多个等值条件”查询(即排序再in索引之后的索引还是可用的)。
  • Mysql对于in的执行:首先将in列表中的数据排序,然后根据二分查找,确定数据是否在in列表中。所以对于in中有大量数据的情况,如果是Or操作,时间复杂度为O(n),而in操作为O(logn)。

Group by

  • 当group by的字段不是索引时,mysql一般会使用到的:
  1. 临时表
  2. 文件排序
    因为数据库将自动安装分组字段进行排序,要避免排序操作,可以显式执行order by null;

Order by

  • order by的字段顺序要和索引的顺序一致,否则将会产生文件排序;
  • 通过索引排序,需要每读取一个索引都回表查询其他字段,是随机I/O事件;若需要的可以被覆盖索引查询,避免随机I/O操作,将大大提升性能;
  • 当使用limit但数值过大时,可以使用延迟关联,先使用覆盖索引查询主键,再查询剩余字段;
  • 关联查询:若order by中的列都来自第一个表,则先排序后关联,此时Using index/filesort;否则先关联,产生一个临时表,再排序,此时Using temporary;Using filesort;

索引的字段顺序

  • 与order by的顺序一致;
  • 把需要做范围查询的列放在后面;

临时表

主要的功能,排序和分组:Group by/Order by

  • Order by子句和Group by子句不同, 例如:Order by price Group by name;
  • 关联查询,使用了不是第一个表的列;

其他使用临时表的操作:union查询;子查询等 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值