SQL中的Teradata Optimizer Equal vs Like

SQL中的Teradata Optimizer Equal vs Like,sql,teradata,Sql,Teradata,我目前正在尝试优化一些后台为Teradata的bobj报告。Teradata optimizer似乎非常挑剔,我想知道是否有人想出了一个解决方案或解决办法,让优化器以类似的方式对待喜欢的对象 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的bobj报告。Teradata optimizer似乎非常挑剔,我想知道是否有人想出了一个解决方案或解决办法,让优化器以类似的方式对待喜欢的对象

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 optimizer的SQL语句?

我认为这个数字是索引的?Teradata使用散列进行索引,因此equals将导致使用索引,而like将导致全表扫描


如果你真的需要使用like,你可以做的不多。您可以尝试使用
Substr(Number,1,3)=“123”
而不是像“123%”这样的
Number
。在过去,我从中获得了一些小的性能改进,但不要期望有什么惊人的结果。

我认为这个数字是索引的?Teradata使用散列进行索引,因此equals将导致使用索引,而like将导致全表扫描


如果你真的需要使用like,你可以做的不多。您可以尝试使用
Substr(Number,1,3)=“123”
而不是像“123%”这样的
Number
。在过去,我从中获得了一些性能改进,但不要期望有什么了不起的结果。

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

e、 g.在数据库中插入“12345”时,创建从“1”、“12”、“123”、“234”等到“12345”的链接


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

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

e、 g.在数据库中插入“12345”时,创建从“1”、“12”、“123”、“234”等到“12345”的链接


然后,当使用find类似于“123**”时,从查找表中查找“123”,并查找记录“12345”

如果您正在进行直接VARCHAR比较,即

Column LIKE 'VALUE'

然后你可以试着在那个专栏上使用NUSI。如果要进行直接VARCHAR比较,请确保收集表的主索引和索引的统计信息,即

Column LIKE 'VALUE'

然后你可以试着在那个专栏上使用NUSI。确保收集表的主索引和索引的统计信息,因为列定义为VARCHAR,并且您使用的是LIKE运算符,因此消除了将PI用于单AMP访问的可能性。请记住,主要索引的第一项工作是在系统中的AMP之间分发数据。因为对PI使用LIKE运算符,所以优化器必须执行“all AMP”操作以满足LIKE运算符的要求

WHERE MyPIColumn LIKE '123%'
从123开始的散列值可以在多个安培上结束

WHERE MyPIColum = '123'
123的散列将把每条记录放在同一个放大器上。查询“123”将始终是一个单安培操作

关于这一点的统计数据可能有助于row估算,但可能不会消除“所有AMP”操作

  • 这是唯一PI还是非唯一PI
  • 为什么选择的数据类型是字符而不是数字?虽然GT(E)或LT(E)可能会导致相同的“全放大器”操作
  • 此PI是否由中的其他表共享 促进AMP本地化的模型 加入战略

  • 由于该列定义为VARCHAR,并且您使用的是LIKE运算符,因此消除了使用PI进行单放大器访问的可能性。请记住,主要索引的第一项工作是在系统中的AMP之间分发数据。因为对PI使用LIKE运算符,所以优化器必须执行“all AMP”操作以满足LIKE运算符的要求

    WHERE MyPIColumn LIKE '123%'
    
    从123开始的散列值可以在多个安培上结束

    WHERE MyPIColum = '123'
    
    123的散列将把每条记录放在同一个放大器上。查询“123”将始终是一个单安培操作

    关于这一点的统计数据可能有助于row估算,但可能不会消除“所有AMP”操作

  • 这是唯一PI还是非唯一PI
  • 为什么选择的数据类型是字符而不是数字?虽然GT(E)或LT(E)可能会导致相同的“全放大器”操作
  • 此PI是否由中的其他表共享 促进AMP本地化的模型 加入战略

  • 谢谢你的回复。是的,不幸的是,我们必须产生一种通配符方法。我将在我们的一些输入上明确地看一下substr。你有关于你的改进的指标吗?我们正在搜索超过1000万行,所以我的假设是一个小的改进会产生很大的影响。这个数字只是我们搜索的一个例子。这也可以是字符串。我也在努力思考如何实施这一点。用户可以为字符串和数字输入N长度的字符串。我想知道我是否可以对字符串进行后期处理以执行正确的substr。抱歉,这是我以前的工作场所,因此我没有任何数字。谢谢您的回复。是的,不幸的是,我们必须产生一种通配符方法。我将在我们的一些输入上明确地看一下substr。你有关于你的改进的指标吗?我们正在搜索超过1000万行,所以我的假设是一个小的改进会产生很大的影响。这个数字只是我们搜索的一个例子。这也可以是字符串。我也在努力思考如何实施这一点。用户可以为字符串和数字输入N长度的字符串。我想知道我是否可以对字符串进行后期处理以执行正确的substr。对不起,这是我以前的工作场所,因此我没有任何nu