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 列会更快,例如 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%"
在我开始创建数据库之前想知道..
最好的问候和感谢大家!
【问题讨论】:
您要搜索什么?非结构化数据? 【参考方案1】:根本没有区别。 . .嗯,很少。查询将不得不进行全表扫描,因为like
模式以通配符(“%”)开头。
如果您关心性能,您可能应该将问题重新表述为全文搜索。从documentation 开始。
【讨论】:
谢谢你的回答,因为我关心性能,当你提到全文搜索时,我还有一个问题,我是否也应该在最多 40 个字符的列上使用全文搜索(VARCHAR[40]).. @Ultrazz008 。 . .这取决于您要搜索的内容。全文搜索的重点是列中的单词,而不是子字符串。 知道了,那么like这个选项比较好...不过以上一个,我会使用全文索引,非常感谢你的回答!【参考方案2】:如果您必须使用LIKE '%something%'
(即LIKE
带有前导通配符),那么
LIKEs
,加上ORs
)另外,你会如何处理恰好分布在两个块中的something
?
该列上没有索引(由于前导通配符,该索引不会被使用)
【讨论】:
以上是关于MySQL - InnoDB 索引 varchar 或索引多个 varchar的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL INNODB主键使用varchar和int有什么区别?