mysql选择错误的索引

iq0todco  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(321)

我有带列的表 blog_detail -
id INT PK, blog_id INT FK, language INT, title VARCHAR(255). blog - id INT PK, author_id INT FK, created DATETIME 我在表中有索引
blog_detail blog_id_language -博客id,语言 blog_id -博客\u id blog_id_title -博客id,标题
查询是:

SELECT  *
    FROM  `blog`
    LEFT JOIN  `blog_detail`  ON `blog`.`id` = `blog_detail`.`blog_id`
    WHERE  (`blog`.`is_active` = 1)
      AND  ((      `blog`.`id`           LIKE "%fulltextsearch%")
              OR  (`blog_detail`.`title` LIKE "%fulltextsearch%")
           )

mysql选择索引 blog_id_language 使用完全不使用的列的。为什么mysql不选择 blog_id 没有无用的列语言或 blog_id_title 那就是使用两个列?

t9eec4r0

t9eec4r01#

您创建的是我假设的普通列索引,它索引列的确切值-这些不能用于模式匹配样式查询(例如“like“%text%”)。但是,他们将开始匹配(例如“like'text%'”)。
您需要将blog.id和blog\u detail.title索引更改为fulltext类型并使用适当的fts(全文搜索),或者将您的场景分解为多个匹配条件。
或者,您可以使用类似lucene的工具来为您建立索引和搜索。
查看此问题以获得更深入的答案:
如何加速选择。。比如mysql中的多列查询?

相关问题