度量快速开发平台-专业、快速的软件定制快开平台

标题: SQL 优化 [打印本页]

作者: fteair    时间: 2020-3-19 18:07
标题: SQL 优化
语句

不走索引而是表扫描的字句
  account_table中记录用户的不同状态, 想要列出table1中所有的用户name(可能重复)。
select distinct name from account_table
选择 所有name都存在且不会重复的一个状态(比如注册行为)来达到同样效果
select name from account_table where status = 1

  Union all + 变换条件 代替 Union
  根据业务规则,尝试把union中不互逆的条件改为互逆的条件


From 小表驱动大表
from子句中写在最后的表(基础表 driving table)将被最先处理。
from子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。
如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。

不要在Where字句中的列名加函数
如Convert,substring等,如果必须用函数的时候,1. 创建计算列再创建索引来替代. 2. 变通写法:WHERE SUBSTRING(firstname,1,1) = 'm'改为WHERE firstname like 'm%'(索引扫描)。
将函数和列名分开,并且索引不能建得太多和太大。   
Where子句中的连接顺序
Oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须写在其它where条件之前,那些可以过滤掉最大数量记录的条件必须写在where子句的末尾。


作者: fteair    时间: 2020-3-20 15:04

作者: fteair    时间: 2020-3-20 15:04

作者: fteair    时间: 2020-3-20 15:08

作者: fteair    时间: 2020-3-20 15:08

作者: fteair    时间: 2020-3-20 15:09

作者: fteair    时间: 2020-3-20 15:09

作者: fteair    时间: 2020-3-23 17:49

作者: fteair    时间: 2020-3-23 17:49





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2