MySQL: LIKE 查询中的默认排序?
MySQL: Default ordering in LIKE queries?
我有一个 MySQL table 给用户,它看起来像这样(部分):
- user_id、user_name、user_password、...
现在我想获取所有用户,其中包含 "foo"。我使用以下查询:
SELECT user_id, user_name FROM users WHERE user_name LIKE '%foo%'
问题:当我没有任何 ORDER BY 子句时,默认情况下 LIKE 查询的结果是如何排序的?
如果未指定 ORDER BY
子句,则顺序不确定。
在从单个 table 中进行选择的简单情况下,如果无法使用索引(这样做 (column) LIKE '%(something)'
会停止在列上使用任何索引),结果将 倾向于 处于 table 顺序,除非您手动重新排序 table,否则将是它们被添加到 table 的顺序。
如果可以使用索引(例如在索引列上执行类似 (column) LIKE '(something)%'
的操作),结果 可能 按索引的顺序返回。
将连接添加到其他 table 会使它更加不确定,因为您还对用于连接条件的任何索引一时兴起。
我有一个 MySQL table 给用户,它看起来像这样(部分):
- user_id、user_name、user_password、...
现在我想获取所有用户,其中包含 "foo"。我使用以下查询:
SELECT user_id, user_name FROM users WHERE user_name LIKE '%foo%'
问题:当我没有任何 ORDER BY 子句时,默认情况下 LIKE 查询的结果是如何排序的?
如果未指定 ORDER BY
子句,则顺序不确定。
在从单个 table 中进行选择的简单情况下,如果无法使用索引(这样做 (column) LIKE '%(something)'
会停止在列上使用任何索引),结果将 倾向于 处于 table 顺序,除非您手动重新排序 table,否则将是它们被添加到 table 的顺序。
如果可以使用索引(例如在索引列上执行类似 (column) LIKE '(something)%'
的操作),结果 可能 按索引的顺序返回。
将连接添加到其他 table 会使它更加不确定,因为您还对用于连接条件的任何索引一时兴起。