【问题标题】:How does mysql LIKE sort its results?mysql LIKE 如何对其结果进行排序?
【发布时间】:2012-05-22 05:49:43
【问题描述】:

按照我的理解,当 MySQL 执行 LIKE 查询时,根据您设置查询的方式 (%)string(%),搜索字符串会在您选择的内容中查找完全匹配的文本。

我很好奇结果行如何以及是否根据找到的匹配项进行排序?

例如,如果我的查询 LIKE 字符串 'frankly' 针对具有以下内容的表进行查询:

id  content
-------------
1   frankly, i find cake rather delicious
2   frankly, i find cake repulsive, frankly
3   i currently live on franklyn street

任何特定的行会比其他行更受青睐吗?

【问题讨论】:

  • “解释计划”会告诉您您的“LIKE”查询是否导致了顺序扫描。如果是,则很有可能按照它们在数据库中的顺序返回。

标签: mysql database sql-like


【解决方案1】:

LIKE 是一种过滤器。

Like 与排序本身并没有真正的关系。

如果您没有添加任何显式排序,则默认情况下对行进行排序(我猜是按键)。

【讨论】:

  • 在 INNODB - 通过键,在 MyISAM 或更多 - 通过 DB 中的行顺序或用于其他字段的其他键。
  • @Moshe,我认为您不能如此明确地说 INNODB 将始终是关键。它不是很大程度上取决于查询的其他部分吗?
  • 如果查询没有 ORDER 子句,并且有其他 WHERE(例如,cat=1 和索引 (cat,date),则订单将在当前版本中按日期变为在 MariaDB 优化或其他更改中)。它会工作,但不要相信它。
【解决方案2】:

MySql 不保证这样的 LIKE 查询的顺序。一般来说,如果你想要一个特定的订单,你必须使用 ORDER BY 来指定它。

具体顺序取决于许多其他因素,例如连接类型(Hash-join、Merge-join 等)和数据访问方法(索引扫描、顺序扫描等)。

【讨论】:

  • +1 如果您没有明确指定顺序,请不要依赖顺序。
猜你喜欢
  • 2021-06-29
  • 2014-10-02
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2017-05-10
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多