0

我有一张桌子TA,有两列C1& C2。TA 有 1 亿多行。我运行一个查询来DISTINCT获取C1 WHERE LEFT(C2, 5) = 'XXXXX'. 我正面临性能问题。获取不同的数据需要几秒钟。

如何提高此查询的性能?

4

3 回答 3

2

通常,您不想在 WHERE 子句中使用字符串函数。

你没有提到 C2 是否被索引。至少如果它被索引,该函数可以应用于索引,而无需读取表中的每一行(扫描)以查看它是否符合您的条件。

于 2012-08-22T01:08:18.767 回答
2

将一个新的文本列添加到您的表中,然后运行一个UPDATE查询,将结果LEFT(C2, 5)放入该列。索引列,然后运行新查询WHERE new_column = 'XXXXX'

于 2012-08-22T01:01:21.080 回答
1

您还可以索引您拥有的列,然后尝试执行以下操作:

where c2 >= 'XXXXX' and
      c2 < 'XXXXY'

或者:

where c2 >= 'XXXXX' and
      c2 <= 'XXXXXZ'

这个想法是将查询从列上的函数切换到范围。如果您有索引,则范围过滤器可以使用列上的索引。

于 2012-08-22T02:09:15.900 回答