关系理论只关心如何根据条件去取得正确的数据集。
关系操作
阶段只负责准确无误的找出属于最终数据集的记录,而不同行的相同字段的关系并不是在这个阶段处理,而是完全属于排序操作。
关系理论并不涉及各种统计功能(例如百分位数等),关系理论所研究的是集合,并不涉及如何为这些集合排序。
SQL 与优化器
当SQL引擎处理查询时,会用优化器找出执行查询最高效的方式。优化器借助关系理论。
优化器会检查下列因素:定义了哪些索引、数据的物理布局、可用内存的大小,以及可用于执行查询任务的处理器数。
优化器还很重视查询直接或间接设计的表和索引的数据量。
以关系理论为支柱的优化器主要用于关系操作层。
sql原本就是一种声明性语言。sql应该用来表达要怎什么,而不是如何来做。从要做什么到如何来做的任务就是优化器来完成的。
查询用了order by为结果集排序,而一旦用了排序操作,该数据集就已经不是关系了(关系是无序的)
关系操作层完成尽量多的工作。因为关系操作层的执行可以优化。
SQL艺术的五大要素:
获得结果集所需访问的数据量。
定义结果集所需的查询条件。
结果集的大小。
获得结果集所涉及的表的数量。
多少用户会同时修改这些数据。
1数据总量
必须访问的数据总量,是要考虑的重要因素。没有确定目标总量之前,很难断定查询执行的效率。
2.定义结果集的查询条件
3.结果集的大小
无论何时,只要查询有可能返回零结果集时,都应该先检查那个最大可能导致空结果集的条件---尤其是在该检查执行非常快捷时。
4.表的数量
SQL时一种声明性语言,用它来说明想要什么,并让DBMS予以执行。
大数据量查询
select ... from a,b,c,d,e1 where and union select ... from a,b,c,d,e2 where and
这类查询是典型的照搬式编程。为了提高效率,可以仅对代码中非共用的表(本例中即e1,e2)使用union,然后配合筛选条件,把union语句降级为内嵌视图。
select ... from a,b,c,d,(select from e1 where union select ... from e2 where ) e where