一般SQL优化方法

在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语句实现的,不要用循环去实现。