如何从' a'开始获取所有customer_names
从customer
表?
为此,我希望获得包含字母a
的所有名称,而不考虑区分大小写。我不想使用to_upper()
,因为它会对查询效果产生负面影响。
答案 0 :(得分:2)
如果您只关心性能,可以创建基于函数的索引
create index idx_fbi_upname
on
table( upper(name) );
select *
from table t
where upper(t.name) like 'A%'
此查询可以使用upper(name)
上的索引。当然,如果您想要区分大小写和不区分大小写的查询,最终可能会有两倍的索引,这将涉及更多的存储空间和更多的维护工作。
答案 1 :(得分:0)
获取包含字母“a”的名称可能需要进行全表扫描。你可以这样做:
where name like '%a%' or name like '%A%'
或
where lower(name) like '%a%'
在大多数情况下,这些都需要全表扫描。
如果您只是在寻找带有“a”的开始的行,那么您可以这样做:
select t.*
from table t
where t.name like 'a%'
union all
select t.*
from table t
where t.name like 'A%';
这可以使用t(name)
上的索引。但是,这仍然可能不使用索引,因为这样的字符串操作可能没有足够的选择性。