你们都知道sql中的like运算符。例如:
select *
from customer
where email like '%goog%'
所以我的问题是数据库如何能够如此快速地返回结果呢? 当我编写这样的函数时,我会遍历所有客户和每封电子邮件。但这很慢。我听说过索引。当数据库不知道第一个或最后一个字母是哪个时,数据库如何使用索引?或者他们是另一种方式吗?
我不想编写类似这样的内容。我只想知道它是如何工作的。
答案 0 :(得分:2)
我不知道你正在使用什么引擎以及它实际引擎盖下面的内容但是这里有一些关于这个问题的有用信息:
答案 1 :(得分:0)
据我所知,这种查询方式效率不高 - 如果存在影响单词开头的通配符,则需要进行整个扫描。但是,如果列被索引,则DBMS只需将整个索引带入内存并扫描它而不是表的全部内容 - 通常这将是一个相对较快的任务。
答案 2 :(得分:0)
由于我们不知道您正在使用哪种RDBMS,让我们看一下数据库在这种情况下可以从索引中受益的一种方式 - 让我们通过本书探讨它/ index隐喻:
成像每行数据占据一本书的页面,并在每个页面上都有一个电子邮件地址。在本书的最后,有一个电子邮件地址索引 - 对于每个电子邮件地址,它会告诉您哪些页面包含该电子邮件地址。该索引的每个页面只包含电子邮件地址和页码。假设每页有50个电子邮件地址。
如果您想查找电子邮件地址中包含字母goog
的所有网页,尽管不知道电子邮件地址的第一个或最后一个字母是什么,您认为这对您来说更容易吗?查看整本书中的每一页,或者b)扫描书后面的电子邮件索引,记下哪些页面有用(如果需要更多信息,则转到这些页面)?