我在一张桌子上有三句话.两个SELECT查询和一个INSERT查询.
// first
SELECT * FROM mytable WHERE id_user = :id AND seen IS NULL
// second
SELECT * FROM mytable WHERE id_user = :id AND timestamp > :tm
// third
INSERT INTO mytable (id, id_user, timestamp) VALUE (NULL, :id, :time)
如您所见,基于前两个SELECT查询,我需要以下两个索引:
ADD KEY id_user1 (id_user, seen);
ADD KEY id_user2 (id_user, timestamp);
一切都很好.但是我听说索引对于INSERT,UPDATE语句有害.我的意思是索引使INSERT,UPDATE变慢.所以我想知道,是否应该在id_user上添加一个索引,就像这样:
ADD KEY id_user (id_user);
实际上,我正在尝试快速选择和插入.那么我应该基于这三个语句添加什么样的索引?
解决方法:
给出两个选择的最佳索引.
但是,任一选择都可以使用任何一个索引.您应该在合理大小的数据集上测试性能,以确定其是否满足您的需求.一个索引很可能会满足您的需求.
您的插入操作将需要将行插入分配的所有索引以及数据表中.这确实增加了插入件的工作量.但是,除非插入的峰值量至少为每秒数百个,否则您不必担心性能.
如今计算机非常快,数据库也写得很好.除非您有很多数据并且要加载很多数据,否则插入性能可能不是问题.