我有3列的组合索引。我想找到这个索引具有相同值的行。这是我的索引:
CREATE INDEX foobar ON tablename (foo, bar, asdf);
索引不是唯一的。我创建它的想法是,它可以帮助我找到在这3列(foo,bar,asdf)中共享相同值的行。
或者,我可以创建一个新列,其值是其他3个列值的组合。但这是我唯一的选择吗?
我可以将此索引用于我想要的内容吗?
答案 0 :(得分:2)
索引不用于分组数据,但可以在表格中找到它。
如果您希望查找具有共同值的项目,最好运行查询,例如
SELECT foo, bar, asdf, SUM(1) as counter
FROM mytable
GROUP BY foo, bar, asdf
这将显示具有倍数的项目,您可以执行更长的查询器来推断具有计数器的查询> 1然后获取它的值:
SELECT t.foo, t.bar, t.asdf, SUM(1) as counter
FROM mytable AS t
GROUP BY t.foo, t.bar, t.asdf
HAVING counter > 1;
答案 1 :(得分:0)
您的索引会加速查询,您希望所有行都包含这三列的特定值,例如:
SELECT * FROM tablename WHERE foo = 1 AND bar = 2 AND asdf = 3
我不确定,但它也可能有助于对结果进行排序以使匹配行相邻的查询,如下所示:
SELECT * FROM tablename WHERE somecondition ORDER BY foo, bar, asdf;
根据您的评论,您似乎想要这样的内容:
SELECT GROUP_CONCAT(id SEPARATOR ',') as ids, foo, bar, asdf, COUNT(*) as cnt FROM tablename GROUP BY foo, bar, asdf HAVING cnt > 1;
这将告诉您哪些行是重复的,您可以从那里检查您需要的各个组。如果你想用一个查询做所有事情,你可以使用一些较重的SQL来做,但这并不简单。