【发布时间】:2009-10-08 15:49:22
【问题描述】:
如果我在 Oracle 中对 VARCHAR2 列创建反向索引,是否还需要反转 WHERE 子句中使用的值?
CREATE INDEX myindex ON myTable(name) REVERSE;
SELECT name FROM myTable WHERE name='Peter';
或
SELECT name FROM myTable WHERE name='reteP';
【问题讨论】:
如果我在 Oracle 中对 VARCHAR2 列创建反向索引,是否还需要反转 WHERE 子句中使用的值?
CREATE INDEX myindex ON myTable(name) REVERSE;
SELECT name FROM myTable WHERE name='Peter';
或
SELECT name FROM myTable WHERE name='reteP';
【问题讨论】:
您要搜索的值是“Peter”。如果您搜索“reteP”,您将返回零行(或至少不是您要查找的行)。
【讨论】:
您需要它来改善数据分布。
例如,许多电影名称以 The 开头,这会降低索引性能。
您不需要反转条件:Oracle 会自动为您完成。
但是,您不能再进行范围查询:
SELECT name FROM myTable WHERE name BETWEEN 'A' AND 'C'
将导致全面扫描
【讨论】:
不,你不知道 - 请参阅 Burleson 了解完整的瘦身信息。
【讨论】: