我目前正在设计一个数据库,其中有一个表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
现在,我正在考虑在read
,user_id
和updated_at
上使用索引来优化获取&amp;排序,但这是否意味着整个索引将在
UPDATE `events` SET `read`='1' WHERE `id`='<event id>'
在这种情况下,性能效率最高的(插入,更新,选择)解决方案是什么?
答案 0 :(得分:2)
MySQL每个查询每个表只使用一个索引(有时在索引合并发生时它使用多个索引),因此创建多个索引不会加速查询。
如果我没记错,最好先在索引中使用最具判别性的选择器,这样user_id.read.updated_at
可能是一个很好的解决方案。
我不知道更新索引是否非常昂贵,但是因为如果read
更改引擎只需要在user_id
叶下操作,默认情况下MySQL索引是树,所以也许影响降低了。
尽管如此,您可以在user_id.updated_at
上设置一个索引,并将MySQL过滤为read
,大多数时候从表中排序数据比过滤更昂贵。