目前,我正试图优化日本央行的一些报告,其中我们的后端是Teradata。Teradata优化器看起来非常挑剔,我想知道是否有人想出了一个解决方案或解决方案,以使优化器以类似于等于的方式对待。
My issue is that we allow the user to input one of two methods:
1. Enter the Number:
or
2. Enter a Number like:选项一像梦一样执行,而选项二是将我们的查询时间从6秒拖到2分。
除此之外,有没有人知道有什么好的文章、讨论、活动等等。如何为teradata优化器优化SQL语句?
发布于 2010-09-30 16:20:53
由于列被定义为VARCHAR,并且您使用的是类似的运算符,所以您排除了使用PI进行单个AMP访问的可能性。记住,首要的索引工作是在系统中的AMP中分发数据。因为您对PI使用了LIKE操作符,所以优化器必须执行“all AMP”操作,以满足LIKE操作符。
WHERE MyPIColumn LIKE '123%'从123开始的值散列可以并且将在多个AMP上结束。
WHERE MyPIColum = '123'123的散列将把每一个记录放在同一个AMP上。查询“123”总是一个AMP操作。
这方面的统计数据可能有助于行估计,但可能不会消除“所有AMP”操作。
发布于 2010-09-15 09:11:05
我想那个号码是有索引的?Teradata使用散列进行索引,所以等于将导致索引被使用,而like将导致完整的表扫描。
如果你有真正的需要使用喜欢,没有太多的你可以做。您可以尝试的一件事是使用Substr(Number, 1, 3) = '123'而不是Number LIKE '123%'。在过去,我从这方面得到了一些小小的性能改进,但不要期待任何引人注目的事情。
发布于 2010-09-15 09:18:39
您将需要一个全文索引/预标记索引,例如lucene,以及两个解析搜索。
例如,当向数据库插入"12345“时,创建从"1”、"12“、"123”、"234"...etc到"12345“的链接。
然后,当使用查找类似于"123**“的内容时,从查找表中查找"123”,并查找到记录"12345“。
https://stackoverflow.com/questions/3712177
复制相似问题