我很好奇,如果我的SQL
数据库的table
中有一行field
为Username
我有数十亿行,我必须从字母开始搜索名称G
和db中的数据是未排序的,所以LIKE
statment迭代每一行?
如果我在我的表中对数据进行排序,是否可以使用类似Binary Search
的内容来减少搜索时间,如果是,那么该怎么做呢?或者在排序后我还要坚持使用LIKE
?
答案 0 :(得分:2)
如果你这样做:
where username like 'G%'
并且没有索引,那么MySQL将扫描每一行。
在SQL的#34;排序表"中确实没有概念。有一个更强大的索引概念。如果你有一个索引username
是第一个(或唯一的键),那么MySQL通常会使用索引来进行这种类型的查询。它可以这样做,因为like
模式以常量开始。
以下不使用索引:
where username like '%G'
where username like '%G%'
where left(username, 1) = 'G'