在SQL语句中可以使用SQL优化,如添加索引、选择合适数据类型、避免使用SELECT *
、使用临时表暂存中间结果等方法,提高查询性能和简化数据库操作。
优化能力
控制IN条件或OR条件的条目数量,过多的条目会导致RCA优化时间加长。
尽量避免在WHERE条件中使用复杂表达式或函数操作,可能导致优化器行数估算不准确。
索引
为避免全表扫描,可以在WHERE条件涉及的列上添加索引。
WHERE条件避免使用
!=
或<>
操作符号,只有在=
、<
、<=
、>
、>=
、between时才可用到索引。WHERE条件中尽量避免使用OR条件。随着被OR的条件增多,优化器越发倾向于不适用索引。当您发现一条SQL预期使用某一列上的索引而实际未使用时,重点排查OR是否过多,有条件可以使用union来改写该SQL。
LIKE条件可以考虑使用全文检索替代。BTREE索引仅支持最左侧不包含通配符的LIKE条件,其他情况需要使用GIST/GIN索引(pg_trgm插件)。
数据类型
尽量使用数值类型,避免使用字符串类型,字符串类型会降低查询和连接性能。
尽量使用
varchar(n)
替代char(n)
,节省存储空间,减少计算内存,加速字符串比较效率。
数据列
尽量避免使用
SELECT *
,从业务角度优化需要输出的列。
临时表
复杂查询可使用临时表暂存中间结果,一方面方便业务调试,另一方面避免不必要的重复计算。
WHERE条件
如果有IN子句,尽量将出现频率高的值放在IN子句的前面,减少比较次数。
JOIN
一个查询中产于JOIN的表数量控制在12个以内,多于12个表JOIN,可以考虑使用临时表拆分语句。
存储过程或函数
能使用SQL语句实现的,不要用循环去实现。
文档内容是否对您有帮助?