Sql技术分享课件.ppt

SQL查询优化原则 保证不查询多余的列与行。不要SELECT * 和 合理使用WHERE过滤数据 慎用distinct关键字。(单个字段无所谓,如果很多字段就要谨慎使用) 慎用union关键字,可以用join替代 连接查询的优化,要减少关联表的数量,可以考虑将where条件写到关联表中 IN 和NOT IN效率低,可以修改为 EXISTS 和NOT EXISTS LIKE要注意使用。 如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。 WHERE 语句原则 从 左到右的顺序处理条件 过滤更多数据的条件放前面 有索引的条件放在前面 索引 单字段索引 对出现在where子句中的字段加索引 组合索引 如果where语句中有多个字段,那么可以考虑创建组合索引。组合索引中字段的顺序是非常重要的,越是唯一的字段越是要靠前。 聚集索引和非聚集索引 它们的主要差别是前者的索引叶子就是数据本身,而后者的叶子节点包含的是指向数据的书签(即数据行号或聚集索引的key)。对一个表而言聚集索引只能有一个,而非聚集索引可以有多个。 索引 一张表建议不超过5个索引 只对会出现在WHERE 语句中的字段建索引 索引会失效,需要重新更新索引 注意SQL的写法,函数等方式是不执行索引的 索引会影响存储等性能,经常变化的字段不建议建立索引 总结 熟悉SQL执行顺序 了解关联的含义和用户 善用事务和锁 做最小集合的查询 体彩因科技更精彩 * 浅谈SQL语法和优化 ——内部分享 企业信息化部 2016年10月 SQL语法 1 SQL事务和锁 2 SQL查询优化 3 SQL语法 SQL 是一种声明式语言 SQL 语言声明的是结果集的属性,计算机会根据 SQL 所声明的内容来从数据库中挑选出符合声明的数据,而不是像传统编程思维去指示计算机如何操作 例如: SELECT first_name, last_name FROM employees WHERE salary 100000 该语句是告诉数据库 我需要查询工资超过10万的员工 错误的思维 电脑,先执行这一步,再执行那一步,但是在那之前先检查一下是否满足条件 A 和条件 B ”。例如,用变量传参、使用循环语句、迭代、调用函数等等。 SELECT语句顺序 常规的SELECT语句 SELECT DISTINCT FROM JOIN ON WHERE GROUP BY HAVING UNION ORDER BY 执行顺序 FROM ON JOIN WHERE GROUP BY HAVING SELECT DISTINCT UNION ORDER BY SELECT语句顺序 FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1 ON:对VT1应用ON筛选器。只有那些使join_condition为真的行才被插入VT2。 OUTER(JOIN):如果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。 WHERE:对VT3应用WHERE筛选器。只有使where_condition为true的行才被插入VT4. GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5. CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6. HAVING:对VT6应用HAVING筛选器。只有使having_condition为true的组才会被插入VT7. SELECT语句顺序 SELECT:处理SELECT列表,产生VT8. DISTINCT:将重复的行从VT8中移除,产生VT9. ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10). TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。 注:按ORDER BY子句中的列列表排序上步返回的行,返回游标VC10.这一步是第一步也是唯一一步可以使用SELECT列表中的列别名的步骤。这一步不同于其它步骤的 是,它不返回有效的表,而是返回一个游标。SQL是基于集合理论的。集合不会预先对它的行排序,它只是成员的逻辑集合,成员的顺序无关紧要。对表进行排序 的查询可

文档评论(0)

1亿VIP精品文档

相关文档