MySQL - InnoDB 索引 varchar 或索引多个 varchar

Posted

技术标签:

【中文标题】MySQL - InnoDB 索引 varchar 或索引多个 varchar【英文标题】:MySQL - InnoDB indexing varchar or indexing multiple varchars 【发布时间】:2017-05-30 12:05:29 【问题描述】:

大家好,我打算创建一个有 10 列的表,应该至少有 10,000,000 行,在其中,我将有列 description - VARCHAR(600) 并在其上建立索引。

所以问题是,在该列上查询 LIKE 会更快吗 - VARCHAR(600),或者将描述拆分为 6 列 100 个字符并用 LIKE 和 @ 索引它们会更快987654324@..

例如:description - VARCHAR(600) INDEX

SELECT `id` FROM `table` WHERE `description` LIKE "%something%"

或者将 description 拆分为 6 列会更快,例如 desc1desc2、..desc6VARCHAR(100) INDEX - 每个列并使用以下查询:

SELECT `id` FROM `table` WHERE `desc1` LIKE "%something%" OR `desc1` LIKE "%something%" OR `desc3` LIKE "%something%" OR `desc4` LIKE "%something%" OR `desc5` LIKE "%something%" OR `desc6` LIKE "%something%"

在我开始创建数据库之前想知道..

最好的问候和感谢大家!

【问题讨论】:

您要搜索什么?非结构化数据? 【参考方案1】:

根本没有区别。 . .嗯,很少。查询将不得不进行全表扫描,因为like 模式以通配符(“%”)开头。

如果您关心性能,您可能应该将问题重新表述为全文搜索。从documentation 开始。

【讨论】:

谢谢你的回答,因为我关心性能,当你提到全文搜索时,我还有一个问题,我是否也应该在最多 40 个字符的列上使用全文搜索(VARCHAR[40]).. @Ultrazz008 。 . .这取决于您要搜索的内容。全文搜索的重点是列中的单词,而不是子字符串。 知道了,那么like这个选项比较好...不过以上一个,我会使用全文索引,非常感谢你的回答!【参考方案2】:

如果您必须使用LIKE '%something%'(即LIKE 带有前导通配符),那么

单列。 (工作量少于 6 个LIKEs,加上ORs)另外,你会如何处理恰好分布在两个块中的something? 该列上没有索引(由于前导通配符,该索引不会被使用)

【讨论】:

以上是关于MySQL - InnoDB 索引 varchar 或索引多个 varchar的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL INNODB主键使用varchar和int有什么区别?

Mysql Innodb 性能 - 如何最小化多列索引?

10.Mysql索引

myisam和innodb的区别

mysql5.6 InnoDB 全文索引 FULLTEXT 中文解决方案 base64

mysql全文索引