【问题标题】:MySQL - InnoDB indexing varchar or indexing multiple varcharsMySQL - InnoDB 索引 varchar 或索引多个 varchar
【发布时间】: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 列会更快,例如 desc1、desc2、..desc6 和 VARCHAR(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%"

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

最好的问候和感谢大家!

【问题讨论】:

  • 您要搜索什么?非结构化数据?

标签: mysql indexing innodb


【解决方案1】:

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

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

【讨论】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 2018-02-08
    • 1970-01-01
    • 2013-04-24
    • 2020-03-15
    • 1970-01-01
    • 2011-09-01
    • 2018-08-17
    相关资源
    最近更新 更多