当前位置:   article > 正文

达梦函数与表达式索引

函数索引最多支持多少列 达梦
文章来自达梦技术社区http://bbs.dameng.com/
DM6.0 开始,达梦数据库新增了一个很重要的特性: function-based index (简称 FBI )。数据库开发人员在 SQL 语句调优的过程中遇到的一个很常见的问题就是,如何优化那些在 WHERE 子句中使用了函数的语句。因为在以前,在 WHERE 子句中使用函数会使在这个表上创建的索引无法利用,从而难以提升高这个语句的性能。但是用户现在可以通过建立函数索引在查询优化的过程中直接使用预先计算好的表达式值,同时函数索引的建立也增加了使用索引范围扫描的可能性,这些都可以用来提高查询效率。例如:
create table person(id int,name varchar(10),intro varchar(200));
create index ind_name on person(name);
explain select * from person where upper(name)='JOHN';
执行计划:
#RSET:[1, 1, 0];
#CSEK:[1, 1, 0]; INDEX33555476(person), FULL_SCAN
在上面的 SQL 语句中,虽然我们在 person 表的 name 字段上建立了索引,这个索引仍然是用不上的,这是因为我们建的索引针对的是列 name ,而不是经过 upper 函数加工后的表达式值。通过执行计划,我们就可以很清楚的了解这一点:索引 ind_name 并没有被用上,最终是通过全表扫描得到查询结果。如果这个表的数据非常大的话,这会消耗大量的时间。我们再看看建立函数索引后的情况:
create index fbi_ind_name on person(upper(name));
explain select * from person where upper(name)='JOHN';
执行计划:
#RSET:[0, 0, 0];
#CSEK(SECOND):[0, 0, 0]; fbi_ind_name(person), INDEX_EQU_SEARCH
从这个执行计划我们可以看到,这次达梦数据库不是对全表进行扫描,而是通过索引进行查询,因为达梦的优化器是基于成本的,所以这里会知道函数索引的存在。
我们来看几个例子,对比一下使用函数索引优化前后的性能:
场景一: TABLE FBI_T01(C INT) ,表中有 100 万数据
执行语句
命中记录数
函数索引
没建索引 (ms)
建索引 (ms)
select * from fbi_t01 where
 c / 3 = 1000;
0
c / 3
219
31
 
场景二: TABLE FBI_T02(C1 VARCHAR(100), C2 VARCHAR(100)) ,表中有 100 万数据
执行语句
命中记录数
函数索引
没建索引 (ms)
建索引 (ms)
select * from fbi_t02 where substring (c1, 4, 1) = 'm';
33570
substring(c1, 4, 1)
594
187
 
场景三: TABLE FBI_T03(C1 INT, C2 INT) ,表中 100 万数据
执行语句
命中记录数
函数索引
没建索引 (ms)
建索引 (ms)
select * from fbi_t03 where
 c1 + c2 = 10000;
0
c1 + c2
219
63
通过上面三个场景的性能测试,我们可以很清楚认识到函数索引对于性能提升的作用。
目前, DM6 的函数索引存在以下约束和限制:
(1) 函数索引只支持单表达式索引,不支持由多个表达式组成的复合索引。但表达式可以由多列组成;
(2)   表达式里面不允许出现大字段列;
(3) 不支持不确定性函数(如: sysdate() 函数,每次查询得到的结果都不一样;
(4)   不支持分区表上建立函数索引;
(5) 不支持建立分区函数索引;
(6) 表达式字符串的长度限制:理论上不能超过 2000 个字符。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23392679/viewspace-627975/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23392679/viewspace-627975/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/630250
推荐阅读
相关标签
  

闽ICP备14008679号