【问题标题】:Does SQL LIKE iterate every row of tableSQL LIKE 是否迭代表的每一行
【发布时间】:2015-02-15 20:19:59
【问题描述】:

我只是好奇,如果我的SQL 数据库的table 中有数十亿行,其中一个fieldUsername,我必须搜索从字母G 开始的名称,而数据库中的数据是未排序所以LIKE 语句是否迭代每一行?? 如果我对表中的数据进行排序,是否可以使用 Binary Search 之类的东西来减少搜索时间,如果是,那么该怎么做?还是在排序后我仍然必须坚持LIKE

【问题讨论】:

  • 始终在所需查询上使用EXPLAIN SELECT.... 检查 MySQL 的执行计划。如果username 被索引,并且您尝试匹配字符串的start,MySQL 可能能够使用该索引。如果两边都使用通配符,它​​将无法使用索引WHERE Username LIKE '%middle%'

标签: mysql sql search sql-like


【解决方案1】:

如果你这样做:

where username like 'G%'

如果没有索引,那么 MySQL 会扫描每一行。

SQL 中确实没有“排序表”的概念。有一个更强大的索引概念。如果您有一个索引,其中username 是第一个(或唯一一个键),那么 MySQL 通常会使用该索引进行此类查询。它可以做到这一点,因为like 模式以常量开头。

以下将使用索引:

where username like '%G'
where username like '%G%'
where left(username, 1) = 'G'

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2018-03-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    相关资源
    最近更新 更多