MySQL插入,更新,按索引排序

时间:2012-10-07 08:57:48

标签: mysql database-design database-indexes database-optimization

我目前正在设计一个数据库,其中有一个表events,它将插入(和更新)-heavy(我预测每分钟介于1,000到5,000次插入之间),但也需要按日期排序

每个事件都有read布尔字段user_id,并按updated_at(日期时间)DESC排序。 select语句类似于

SELECT * FROM `events` WHERE `read`=0 AND `user_id`='<user id>' ORDER BY `updated_at` DESC

现在,我正在考虑在readuser_idupdated_at上使用索引来优化获取&amp;排序,但这是否意味着整个索引将在

上更新
UPDATE `events` SET `read`='1' WHERE `id`='<event id>'

在这种情况下,性能效率最高的(插入,更新,选择)解决方案是什么?

1 个答案:

答案 0 :(得分:2)

MySQL每个查询每个表只使用一个索引(有时在索引合并发生时它使用多个索引),因此创建多个索引不会加速查询。

如果我没记错,最好先在索引中使用最具判别性的选择器,这样user_id.read.updated_at可能是一个很好的解决方案。

我不知道更新索引是否非常昂贵,但是因为如果read更改引擎只需要在user_id叶下操作,默认情况下MySQL索引是树,所以也许影响降低了。

尽管如此,您可以在user_id.updated_at上设置一个索引,并将MySQL过滤为read,大多数时候从表中排序数据比过滤更昂贵。