SQL LIKE 是否迭代 table 的每一行
Does SQL LIKE iterate every row of table
我很好奇,如果我的 SQL
数据库的 table
中有数十亿行,其中一个 field
是 Username
并且我必须搜索名称开始从字母 G
和数据库中的数据未排序所以 LIKE
语句每一行迭代?
如果我在 table 中对数据进行排序,是否可以使用 Binary Search
之类的东西来减少搜索时间,如果是,那么该怎么做?或者排序后我还得坚持 LIKE
?
如果你这样做:
where username like 'G%'
并且没有索引,那么MySQL会扫描每一行。
"sorted tables"的SQL确实没有概念。有一个更强大的索引概念。如果您有一个索引,其中 username
是第一个(或唯一的键),那么 MySQL 通常会将索引用于此类查询。它可以做到这一点,因为 like
模式以常量开头。
以下将不使用索引:
where username like '%G'
where username like '%G%'
where left(username, 1) = 'G'
我很好奇,如果我的 SQL
数据库的 table
中有数十亿行,其中一个 field
是 Username
并且我必须搜索名称开始从字母 G
和数据库中的数据未排序所以 LIKE
语句每一行迭代?
如果我在 table 中对数据进行排序,是否可以使用 Binary Search
之类的东西来减少搜索时间,如果是,那么该怎么做?或者排序后我还得坚持 LIKE
?
如果你这样做:
where username like 'G%'
并且没有索引,那么MySQL会扫描每一行。
"sorted tables"的SQL确实没有概念。有一个更强大的索引概念。如果您有一个索引,其中 username
是第一个(或唯一的键),那么 MySQL 通常会将索引用于此类查询。它可以做到这一点,因为 like
模式以常量开头。
以下将不使用索引:
where username like '%G'
where username like '%G%'
where left(username, 1) = 'G'