SQL优化——select
MYSQL优化实施方案:https://www.cnblogs.com/clsn/p/8214048.html
-
对查询时经常用到的字段建立索引,如包含多个也可以构建复合索引,建立索引之后需要注意的一点是,查询时要确保和设计字段的格式是一致,如
SELECT * FROM TABLE WHERE USER_ID = 12345
这里USER_ID的类型是NUMBER,而实际设计表时如果USER_ID的类型是VARCHAR时,这里索引就会用不到,从而造成全表扫描。如发现查询时间过长,可以用
explain SELECT * FROM TABLE WHERE USER_ID = 12345
来查看明细
-
当表过大时,可以将老数据,历史数据进行归档(前提这些数据以后不用),减少数据量!!
-
经常用到的查询,或者较为复杂的查询时(多个表的联合查询)可以创建视图。
视图的优缺点:
优点:
缺点:
-
尽量不要有空判断的语句,空判断会导致全表扫描,对于空判断这种情况,可以考虑对这个列创建数据库默认值。
-
尽量不用不等于条件,这样容易导致全表扫描,尽量使用范围查询。
-
尽量使用exists代替In,或者用外连接代替in
-
尽量不用or条件,会导致全表扫描,可以分开查询然后union all
-
分库分表。如果是HIVE还可以分桶,HIVE的分区中,每个分区以文件夹的形式单独存放在表文件夹的目录下,桶则是文件形式
-
左模糊查询尽量不要使用,会引起全表扫描
-
理论上尽量多使用多表查询(left),少使用子查询
-
WHERE子句中的连接顺序.:
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. -
优化group by,提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。
-
加上并行化参数
-
应该还有很多其他方法,暂时想不起来