首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中的等于vs

SQL中的等于vs
EN

Stack Overflow用户
提问于 2010-09-14 19:23:04
回答 4查看 4.9K关注 0票数 0

目前,我正试图优化日本央行的一些报告,其中我们的后端是Teradata。Teradata优化器看起来非常挑剔,我想知道是否有人想出了一个解决方案或解决方案,以使优化器以类似于等于的方式对待

代码语言:javascript
复制
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语句?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-30 16:20:53

由于列被定义为VARCHAR,并且您使用的是类似的运算符,所以您排除了使用PI进行单个AMP访问的可能性。记住,首要的索引工作是在系统中的AMP中分发数据。因为您对PI使用了LIKE操作符,所以优化器必须执行“all AMP”操作,以满足LIKE操作符。

代码语言:javascript
复制
WHERE MyPIColumn LIKE '123%'

从123开始的值散列可以并且将在多个AMP上结束。

代码语言:javascript
复制
WHERE MyPIColum = '123'

123的散列将把每一个记录放在同一个AMP上。查询“123”总是一个AMP操作。

这方面的统计数据可能有助于行估计,但可能不会消除“所有AMP”操作。

  1. 这是一个唯一的PI还是非唯一的PI?
  2. 为什么选择数据类型为字符而不是数字?虽然GT(E)或LT(E)可能会导致相同的“All- AMP”操作。
  3. 模型中的其他表是否共享这个PI以促进AMP的本地连接策略?
票数 1
EN

Stack Overflow用户

发布于 2010-09-15 09:11:05

我想那个号码是有索引的?Teradata使用散列进行索引,所以等于将导致索引被使用,而like将导致完整的表扫描。

如果你有真正的需要使用喜欢,没有太多的你可以做。您可以尝试的一件事是使用Substr(Number, 1, 3) = '123'而不是Number LIKE '123%'。在过去,我从这方面得到了一些小小的性能改进,但不要期待任何引人注目的事情。

票数 1
EN

Stack Overflow用户

发布于 2010-09-15 09:18:39

您将需要一个全文索引/预标记索引,例如lucene,以及两个解析搜索。

例如,当向数据库插入"12345“时,创建从"1”、"12“、"123”、"234"...etc到"12345“的链接。

然后,当使用查找类似于"123**“的内容时,从查找表中查找"123”,并查找到记录"12345“。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3712177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档