roh*_*k89 2 sql oracle where sql-like
我们有表格,每当用户登录应用程序时,我们都会在其中记录详细信息。我们使用以下查询来获取工作正常的详细信息
select username
from table
where username like 'abc%'
order by timestamp desc
Run Code Online (Sandbox Code Playgroud)
我们得到结果
abcxyz
Run Code Online (Sandbox Code Playgroud)
但是当我们将 % 放在字符串的开头时,它花费了太多时间并且没有给出任何结果。
select username
from table
where username like '%xyz'
order by timestamp desc
Run Code Online (Sandbox Code Playgroud)
或者
select username
from table
where username like '%cx%'
order by timestamp desc
Run Code Online (Sandbox Code Playgroud)
用户名列是索引 PFB 详细信息。column_position:1 column_length:512 CHAR_length:512 降序:ACS
有人可以解释这种行为吗,我怎样才能得到第二/第三次查询的结果?
如果username列上有索引,您的观察将完全符合预期。如果它确实有索引,那么以下查询可以在搜索匹配的用户记录时利用该索引:
select username from table where username like 'abc%' order by timestamp desc
Run Code Online (Sandbox Code Playgroud)
索引username有助于上述LIKE表达式的原因是 B 树是在用户名上从左到右构建的。
在另一方面,在索引username将不会对下面的查询有所帮助:
select username from table where username like '%xyz' order by timestamp desc
Run Code Online (Sandbox Code Playgroud)
在这种情况下,B树不能帮助我们找到用户名结束在xyz。之所以如此,是因为此类匹配记录可能出现在树中的任何位置。相反,可能需要进行全表扫描。
有关更多信息,您可以尝试对两个查询运行解释。