SQL查询基础知识&优化实践(一)

2015-11-17
瞿锴
产业园

SQL

定义:高级语言,从数据库中获取数据的子集

连接

嵌套循环连接(Cross Join)

外部输入和内部输入
外部输入在100条以内时,可以选择Cross Join,左边有多少条数据,右边的数据就会扫描多少遍

合并连接(Merge Join)

双方有序,且join的条件为等于号
两边都分别只要扫描一遍

散列连接(Hash Join)

通过在内存中建立散列表实现。
比较占内存,内存不足还会占tempdb,尽量不要用散列连接。

可以手动在SQL语句中指定连接方式,但一般情况下SQL SERVER会自动选择最优的连接方式。
可通过提前筛选连接两端的数据来提升效率。

子查询

子查询可写成完全等价的关联查询

临时表和表变量

临时表可以建索引
表变量不能改结构,临时表可以
作用域不一样,临时表的作用域是会话;表变量的作用域是当前批处理
临时表存在统计信息,而表变量没有统计信息,认为表变量只有一条数据。
建议:如果行数<100,使用表变量,做分页,用临时表

公用表达式(CTE)

减少SQL的逻辑复杂度,对性能的提升并没有帮助

索引

SQL查询基础知识&优化实践(一)_第1张图片
索引

希望参与判断的字段都在索引页(非聚集索引)上
包含性列(减少键查找),不参与排序,但在索引页上的字段
索引键:有前后顺序,方便更好更快地找到需要的数据
聚集索引只存主键,所以一张表只能有一个聚集索引。

逻辑读
物理读
预读(减少物理I/O的次数)

执行计划

你可能感兴趣的:(SQL查询基础知识&优化实践(一))