索引组的排序

时间:2016-05-28 20:54:03

标签: mysql sql indexing

我在某处读到这两个索引组之间有所不同:

  • ADD KEY id_user (id_user,seen);
  • ADD KEY id_user (seen,id_user);
那好吗?如果是,那么他们的订单应该基于什么参数?

实际上我在一张桌子上有这两个查询:

查询1:

SELECT * FROM mytable WHERE id_user = :id AND seen IS NULL

QUERY2:

SELECT * FROM mytable WHERE id_user = :id AND timestamp > :tm

那么在我的案例中哪种索引是正确的?目前,我在id_userseentimestamp列上有三个分开的索引。

2 个答案:

答案 0 :(得分:1)

您的查询在id_user上都具有相等条件。因此,要么可以利用索引,其中id_user是索引中的第一个键。所以,我会推荐你​​提到的第一个索引。

MySQL有很多关于多列索引的文档。我建议你开始there来了解它们。

您的查询可以利用(id_user, seen)(id_user, timestamp)上的索引。也许,第一把钥匙是最重要的。您应该尝试这些不同的索引,看看哪个最符合您的性能目标。

答案 1 :(得分:1)

最有可能的是,user_id上的索引就足够了。但是如果你有多次重复user_id s,那么你可以制作两个索引组

ADD KEY id_user1 (id_user, seen);
ADD KEY id_user2 (id_user, timestamp);

选择将首先使用user_id来减少数量或匹配,然后使用timestampseen中的第二个字段。

对于查找user_idseen的选项,这两个索引

ADD KEY id_user1 (id_user,seen);
ADD KEY id_user2 (seen,id_user);

的结果大致相同。

在任何情况下,您都应该使用EXPLAIN SELECT * FROM ...来检查慢查询的执行情况,这样您就可以确切地看到它的速度,以及您的索引是否按预期实际使用。