陈巴尔虎旗网站建设,广州建设六马路小学网站,网站优化排名哪家性价比高,婚庆设计效果图前言
最近在调研业界其他数据库中 SQL Hint 功能的设计和实现#xff0c;整体上对 Oracle、Mysql、Postgresql、 Apache Calcite 中的 SQL Hint 的设计和功能都进行了解#xff0c;这里整理一篇文章来对其进行梳理#xff0c;一是帮助自己未来回顾#xff0c;加深自己的思…前言
最近在调研业界其他数据库中 SQL Hint 功能的设计和实现整体上对 Oracle、Mysql、Postgresql、 Apache Calcite 中的 SQL Hint 的设计和功能都进行了解这里整理一篇文章来对其进行梳理一是帮助自己未来回顾加深自己的思考二是也能帮助大家更好的了解数据库 SQL Hint 的实现原理。
由于我是做数据库引擎开发的所以每日一学系列就先以数据库技术作作为开头我估计我最少会写几十篇内容来介绍数据库技术吧每天分享一个点来帮助大家理解数据库的使用和原理分享的内容我应该会逐渐由浅入深好了今天的主题开始。
一、什么是数据库 SQL Hint
SQL Hint 是一种能够让用户干预数据库 SQL 优化的方式相当于给用户开了一个后门当数据库本身对于某些 SQL 优化的不够好时那么用户就可以结合自己的经验尝试使用 Hint 来干预数据库的优化。
举个列子比如能够让用户指定 SQL 查询 Join Order 的顺序、单个 Query 级别的 Session 参数等等。
虽然数据库 SQL 优化器在大部分场景已经能够产出较优的计划但可能存在某些复杂场景比如基数评估不准等可能会导致最终的计划性能较低此时用户就可以通过 SQL Hint 的方式来干预优化器的计划产生从而产出更优的计划。
数据库 SQL Hint 的一般有两种格式以/*开头的一种特殊的 SQL 注释比如 Oracle、Mysql和 SQL 关键字比如 SQL Server业界比较多的设计是前面这扬中也就是 SQL 注释。
由于数据库 SQL Hint 是 SQL 注释这不会破坏 SQL 标准和兼容性在 Oracle、Mysql 中SQL Hint 必须出现在 Select、Insert、Update 等 SQL 关键字后面。多个 Hint 之间可以是“,”进行分隔也可以是空格分隔。
对于 SQL Hint 的作用域一般可以划分为三种类型
单个 Query 级别 – 对于 Query 级别的 Hint即 Hint 作用于是整个 Query 级别的比如 Query 的 Session 参数资源组的配置一个 Query 中 的 Query Block 级别 – Query Block 级别的 Hint一般作用于所属的 Query Block对于 Query Block 的解释下面这张图比较清晰 添加图片注释不超过 140 字可选
Table 级别 – Table 级别的 Hint 作用于比较好理解就是作用于 Table Scan 的同时 Table 的Hint 只能 Attach 所属的 Table Scan 上。
下面是一个使用 SQL Hint 的 SQL SELECT
/* HASH_JOIN(e, d),RESOURCE(mem128mb, parallelism24)*/ e.last_name, d.location_id
FROM employees e, departments d
WHERE e.dep_id d.dep_id;/* HASH_JOIN(e, d),RESOURCE(mem‘128mb’, parallelism‘24’) */表示有两个 Hint第一个表示employees和departments的 Join 实现方式使用 HashJoin。第二个 Hint 表示这个 Query 使用资源的配置每个 Task 128 MB并发度为 24.w。
SQL Hint 是一种能够让用户干预数据库 SQL 优化的方式相当于给用户开了一个后门当数据库本身对于某些 SQL 优化的不够好时那么用户就可以结合自己的经验尝试使用 Hint 来干预数据库的优化相当于留了一个后门。
二、为什么需要数据库 SQL Hint
前面有说到需要 SQL Hint 的核心原因是希望为优化器提供一种人工可干预的优化手段。
对于客户侧存在某些特殊场景的一些问题对于这种特殊 Case优化器可能不能发挥比较好的优化从而会导致查询时间很久此时我们期望能够以很小的成本能够手动干预和介入到优化中来解决客户现场的问题。
对于用户而言我们期望其尽可能少的感知到自己需要手工优化的点尽可能多的让优化器来做这些优化以及产出一个较好的优化计划。 更多精彩内容欢迎关注我的公粽号 【雷克分析】 关注私信发送命令、提效、数据库、提示词、calcite、论文有学习资料等着你 欢迎关注