备注:问题摘抄自 张一勤老师
为什么 group by 的效率比较低?
group by 是将数据分组,这其中实际也会涉及到排序的操作。如果你的数据量很大,那么,这个排序过程可能是非常慢的。所以,排序的过程会降低 SQL 语句的执行效率。
将数据全量查出,在程序中处理,这样好吗?
这样肯定是不合适的。因为这样做:大数据量的传输很耗时、消耗机器的内存、大数据量的处理本身也非常慢。
group by的常用优化方案
效率低的根本原因就是因为数据量大导致的,所以,想要做优化,核心思想就是降低数据量。可以在 group by 之前把需要过滤的数据通过 where 条件给出;给 group by 的相关字段加上索引等等。
判断一条数据记录是否在一张表中
这个判断最高效的方式当前是判断主键;如果不能通过主键判断,需要 where 去查询带有索引的字段列;如果需要判断的列没有索引,mysql 是需要扫描数据记录的,效率最低。
哪些字段类型适合加索引 ?哪些字段类型不适合加索引 ?你能解释清楚吗 ?
其实,对于字符类型,也并不是绝对不能加索引的。数据库常用的索引规范如下:
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响。