小蚂蚁学习mysql性能优化(4)--SQL以及索引优化--具体一些优化方法
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> max()的优化 例如:explain select max(`payment_date`) from payment; 可以查看到row的行数非常的多,也就是说扫描了整张表。 为payment_date加上一个索引。 create index idx_payment on payment (`payment_date`); 执行sql语句 explain select max(`payment_date`) from payment order by payment_date; 可以看到rows为null。 extra: select tables optinized away; 并没有扫描整个表,只是通过索引拿出。 索引是通过顺序排列的,所以,通过索引的统计信息就非常清楚的知道,最后一个payment_date的数值是什么样子的。因此并不需要对表的操作,这样就大大的增加了这条sql的执行效率,同时尽可能大的减少了IO操作,这样的话,不管数据量有多大,执行效率基本上是恒定的。 思路:对于max()的查询,可以通过索引的方式来优化它。 count(*)和count(num)的区别 如果num某行为null,count(num)是不包含在内的。而count(*)则是会包含在内的。这就是为什么有时会出现差异的原因。