我有以下mysql架构:
CREATE TABLE IF NOT EXISTS `tag` (
`id` SMALLINT UNSIGNED NOT NULL,
`tag` VARCHAR(15) NOT NULL,
FULLTEXT INDEX(`tag`),
PRIMARY KEY (`id`,`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tag`(`id`,`tag`) VALUES
('1','motor'),
('2','motor');
我想从中选择行 tag
表分组依据 tag
列。我运行了以下命令:
SELECT COUNT(id),tag FROM tag
GROUP BY tag
预期结果:
COUNT(id) | tag
------------------
2 | motor
实际结果: no rows returned
如果我移除 FullText
从表中索引,结果按预期返回。我不知道使用时出了什么问题 fulltext
与 group
随着进一步的研究,问题似乎来自复合主键。如果切换到一列主键,查询将再次工作,但我需要为此表使用复合键,因为同一id可能有多个标记。
我创建了一个sql fiddle供您尝试:http://sqlfiddle.com/#!9/1f765d/1/0号
1条答案
按热度按时间iszxjhcz1#
终于发现了问题。引擎在执行查询时有两个索引可供选择,结果根本不使用任何索引,也不返回任何结果。
很有可能是个虫子。在这种情况下
FORCE INDEX
作为一种解决方法很方便。最后的工作指令是:
这是对最新代码的篡改:http://sqlfiddle.com/#!9/a8568/21/0号
谢谢大家!