gpt4 book ai didi

MySQL选择错误的索引

转载 作者:行者123 更新时间:2023-11-29 09:55:52 25 4
gpt4 key购买 nike

我有带有列的表格

blog_detail - id INT PK、blog_id INT FK、语言 INT、标题 VARCHAR(255)。

博客 - id INT PK,author_id INT FK,创建日期

<小时/>

我在表 blog_detail 中有索引

blog_id_language - blog_id、语言

blog_id - blog_id

blog_id_title - blog_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

最佳答案

您正在创建我认为是正常的列索引,它索引列的确切值 - 这些不能与模式匹配样式查询一起使用(例如“LIKE '%text%'”)。但是,它们将适用于开头匹配(例如“LIKE 'text%'”)。

您需要将 blog.id 和 blog_detail.title 索引更改为 FULLTEXT 类型并使用适当的 FTS(全文搜索),或者将您拥有的场景分解为多个开始匹配条件。

或者,您可以使用 lucene 之类的工具来为您建立索引和搜索。

查看此问题以获得更深入的答案:

How to speed up SELECT .. LIKE queries in MySQL on multiple columns?

关于MySQL选择错误的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53871287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com