执行计划是SQL语句的执行方式,达梦数据库的查询优化器是基于代价计算的。在选择使用的执行计划时会受环境,比如统计信息的影响。如果统计信息不正确,可能会导致优化器使用错误的执行计划,从而导致SQL执行异常。如果SQL执行时间异常,就需要查看对应的执行计划是否正确。在执行计划中需要重点关注两点:数据访问路径和连接方式。这些内容在执行计划中通过操作符来体现。操作符是SQL执行的基本单元,所有的SQL语句最终都会转换成一连串的操作符,最后在数据库实例上执行。
CSCN:基础全表扫描,从头到尾,全部扫描。
SSCN:二级索引扫描,从头到尾,全部扫描。
SSEK:二级索引范围扫描,通过键值精准定位到范围或单值。
CSEK:聚集索引范围扫描,通过键值精准定位到范围或单值。
BLKUP:根据二级索引的ROWID,回原表中取出全部数据。
SLCT:过滤条件,对结果集进行过滤。
SORT:排序操作符。
每种访问操作符,底层对应各种算子,对应各种方式去表内取数据,通过调用不同的算子,不同的顺序,把数据从表取出来,每种算子,在不同的场景,会消耗不同的CPU,和IO,即成本代价,优化器基于CBO,选择“最优”的算子顺序和组合,即执行计划,去表中取数据
NEST LOOP INNER JOIN(嵌套循环连接):非等值连接时会选择嵌套连接。
HASH JOIN(哈希连接):两张表进行等值连接时会选择哈希连接。
INDEX JOIN(索引连接):将一张表的数据拿出,去另一张表上进行范围扫描,找出需要的数据行,要求扫描表的连接列上存在索引。
MERGE JOIN(归并连接):两张表的连接列均为索引列,可以按照索引顺序进行归并,一个归并就可以找出满足条件的记录。
查看执行计划的方法是在SQL语句中使用关键字explain.
或者在DM管理工具中查看执行计划。执行计划重用功能可以通过设置USE_PLN_POOL参数来启用,以减少分析优化过程,提高执行效率。
可以通过设置USE_PLN_POOL参数为非0来启用执行计划重用机制。这样,查询优化器会将相同的SQL语句及其对应的执行计划缓存起来,当再次执行相同的SQL语句时,可以直接从缓存中获取已有的执行计划,而不需要重新进行分析和优化,从而提高了执行效率。需要注意的是,启用执行计划重用机制会增加内存消耗,因此需要根据实际情况进行配置和调整
create table T1(ID int,NAME1 varchar);
BEGIN
FOR i IN 1..200 LOOP
INSERT INTO T1 values(i,'A'||i);
END LOOP ;
END;
create table T2(ID int,NAME1 varchar);
BEGIN
FOR i IN 1..200 LOOP
INSERT INTO T2 values(i,'B'||i);
END LOOP ;
END;
commit;
explain select * from T1 t1 join T2 t2 using(ID) where t1.NAME1 = 'A10' or t2.NAME2 = 'B20';
(1)既可以先从表t1里取出NAME1等于A10对应记录的ID值,在根据ID值关联t2表中NAME2值等于'B20'的记录
(2)也可以先从表t2中找到NAME2值等于'B20'记录对应的ID值,在根据ID值关联NAME1等于'A10'记录
这两种执行方法的结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定使用哪一种方案
统计信息的准确与否、代价模型的合理与否都会影响CBO选择最优计划
(1)调用不同表接口(索引组织表或者堆表),取这张表的第一行,判断ID是否满足条件,如果是则将结果缓存到结果集中,否则跳过
(2)调用表接口取“下一行”,重复相同的逻辑判断,直到取到这个表的最后一行。
(3)执行器将上述过程中筛选出来的满足条件的记录行组成的记录及作为结果集返回给客户端
理论上是一条条读出来,其实是通过页为载体进行交互的
1.将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位
2. 达梦的页的大小一般为 8 KB,也就是在一般情况下,一次最少从磁盘中读取8KB的内容到内存中,
一次最少把内存中的8KB内容刷新到磁盘中
达梦社区技术https://eco.dameng.com
文章
阅读量
获赞