如何从表中获取从"a"开始的所有customer_names
customer
?
为此,我想获取包含字母的所有名称a
而不考虑大小写。我不想使用to_upper()
,因为它会对查询性能产生负面影响。
如果您只关心性能,则可以创建基于函数的索引
create index idx_fbi_upname
on
table( upper(name) );
select *
from table t
where upper(t.name) like 'A%'
此查询可以使用 upper(name)
上的索引。 当然,如果要同时执行区分大小写和不区分大小写的查询,则最终可能会得到两倍的索引,这将涉及更多的存储空间和更多的维护工作。
获取包含字母"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)
上的索引。 但是,这仍然可能不使用索引,因为此类字符串操作可能没有足够的选择性。