我有一张桌子TA
,有两列C1
& C2
。TA 有 1 亿多行。我运行一个查询来DISTINCT
获取C1 WHERE LEFT(C2, 5) = 'XXXXX'
. 我正面临性能问题。获取不同的数据需要几秒钟。
如何提高此查询的性能?
我有一张桌子TA
,有两列C1
& C2
。TA 有 1 亿多行。我运行一个查询来DISTINCT
获取C1 WHERE LEFT(C2, 5) = 'XXXXX'
. 我正面临性能问题。获取不同的数据需要几秒钟。
如何提高此查询的性能?
通常,您不想在 WHERE 子句中使用字符串函数。
你没有提到 C2 是否被索引。至少如果它被索引,该函数可以应用于索引,而无需读取表中的每一行(扫描)以查看它是否符合您的条件。
将一个新的文本列添加到您的表中,然后运行一个UPDATE
查询,将结果LEFT(C2, 5)
放入该列。索引列,然后运行新查询WHERE new_column = 'XXXXX'
。
您还可以索引您拥有的列,然后尝试执行以下操作:
where c2 >= 'XXXXX' and
c2 < 'XXXXY'
或者:
where c2 >= 'XXXXX' and
c2 <= 'XXXXXZ'
这个想法是将查询从列上的函数切换到范围。如果您有索引,则范围过滤器可以使用列上的索引。