create index int_index on tbl (cast(cast(num_as_string as decimal) as integer));
**Fiddle:**http://sqlfiddle.com/#!15/d0f46/1/0
稍后,当您运行如下查询时:
select *
from tbl
where cast(cast(num_as_string as decimal) as integer) = 12
将使用索引,因为索引基于应用于列的该函数的结果,而不是列本身。
SQL Server:
在SQL Server中,您可以按如下方式添加计算列和该计算列的索引:
create table tbl (num_as_string varchar(10));
insert into tbl (num_as_string) values ('12.3');
alter table tbl add num_as_string_int as cast(cast(num_as_string as decimal) as integer);
create index int_index on tbl (num_as_string_int);
2条答案
按热度按时间wooyq4lh1#
在PostgreSQL中,您可以创建函数索引("index on expression"),比创建冗余列占用更少的存储空间。
请记住,查询必须与表达式匹配才能使用这样的索引。喜欢:
(CAST作品和
cast()
的替代语法速记。)当然,所有
varchar
值必须有效才能转换为int
,如果是这样的话,更好的方法是从开始将类型更改为integer
。在任何RDBMS中。e0bqpujr2#
PostgreSQL:
创建基于函数的索引,如下所示:
**Fiddle:**http://sqlfiddle.com/#!15/d0f46/1/0
稍后,当您运行如下查询时:
将使用索引,因为索引基于应用于列的该函数的结果,而不是列本身。
SQL Server:
在SQL Server中,您可以按如下方式添加计算列和该计算列的索引:
然后对num_as_string_int进行查询以使用该索引。
**提琴:**http://sqlfiddle.com/#!6/1f378/2/0