【发布时间】:2016-11-13 00:33:09
【问题描述】:
我有一个名为 tags_table 的表,其 id 列类型为 INT(11),标签列类型为 VARCHAR(200)。
有大约 3,000,000 个唯一 ID 和大约 300,000 个唯一标签。
因为每个 id 有多个标签,所以大约有 78,000,000 行,这使得查询非常慢。查询的一个例子是SELECT id FROM tags_table WHERE tag = "flower"
如果我创建一个唯一标签表并修改 tags_table 以包含这些标签字符串的索引而不是字符串本身,我的查询会执行得更快吗?如果是这样,我该怎么做?我的目标是最小化查询持续时间。
这是表的创建语句:
CREATE TABLE `tags_table` (
`id` int(11) unsigned NOT NULL,
`tag` varchar(200) CHARACTER SET utf8 NOT NULL,
UNIQUE KEY `no_dup_tags` (`id`,`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
【问题讨论】:
-
您忘记了重要的事实 - 索引。你有吗?
-
你能发布你的表格结构吗
-
@juergend 我有一个可以使 id-tag 对独一无二,但仅此而已
-
@jaidutt 我该怎么做?
-
只要在
tags上有任何索引,最好是(tag, id)。使用第二个表会快一点,因为它会小很多,因为索引和表将包含整数而不是 utf8 varchar(200),但与使用索引相比,这将是一个小的加速,所以这可以是第 2 步。来自 jai 的全文索引也可以使用。只要您在tags上有任何索引,您就会很高兴!
标签: mysql query-optimization mysql-workbench