MySQL - InnoDB 索引 varchar 或索引多个 varchar
MySQL - InnoDB indexing varchar or indexing multiple varchars
大家好,我打算创建包含 10 列的 table,这应该至少有 10,000,000 行,并且在其中,我将有列 description - VARCHAR(600)
和索引。
所以问题是,在该列 - VARCHAR(600) 上查询 LIKE
会更快,还是将描述拆分为 100 个字符的 6 列并使用 LIKE
和 OR
..
例如: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%"
只是想知道在我开始创建数据库之前..
向大家致以最诚挚的问候!
完全没有区别。 . .嗯,很少。查询将必须进行完整的 table 扫描,因为 like
模式以通配符 ("%") 开头。
如果您关心性能,您或许应该将问题改写为全文搜索。从 documentation.
开始
如果必须使用 LIKE '%something%'
(即带前导通配符的 LIKE
),则
- 单列。 (工作少于 6
LIKEs
,加上 ORs
)另外,如果 something
恰好分布在两个块中,您会怎么做?
- 该列没有索引(由于前导通配符,索引不会被使用)
大家好,我打算创建包含 10 列的 table,这应该至少有 10,000,000 行,并且在其中,我将有列 description - VARCHAR(600)
和索引。
所以问题是,在该列 - VARCHAR(600) 上查询 LIKE
会更快,还是将描述拆分为 100 个字符的 6 列并使用 LIKE
和 OR
..
例如: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%"
只是想知道在我开始创建数据库之前..
向大家致以最诚挚的问候!
完全没有区别。 . .嗯,很少。查询将必须进行完整的 table 扫描,因为 like
模式以通配符 ("%") 开头。
如果您关心性能,您或许应该将问题改写为全文搜索。从 documentation.
开始如果必须使用 LIKE '%something%'
(即带前导通配符的 LIKE
),则
- 单列。 (工作少于 6
LIKEs
,加上ORs
)另外,如果something
恰好分布在两个块中,您会怎么做? - 该列没有索引(由于前导通配符,索引不会被使用)