我有以下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小提琴: http://sqlfiddle.com/#!9/1f765d/1/0
答案 0 :(得分:0)
终于发现了这个问题。该引擎在执行查询时有2个索引可供选择,最终根本不使用任何索引,并且不返回任何结果。
这很可能是一个错误。这是FORCE INDEX
作为解决方法派上用场的一种情况。
所以最后的工作命令:
SELECT COUNT(id),tag FROM tag
FORCE INDEX(PRIMARY)
GROUP BY tag
这是更新代码的小提琴: http://sqlfiddle.com/#!9/a8568/21/0
谢谢大家!