1

我目前正在设计一个数据库,该数据库具有一个events插入(和更新)大量的表(我预测每分钟插入 1,000 到 5,000 次),但也需要按日期排序。

每个事件都有一个read布尔字段 ,并按(datetime)user_id排序。选择语句将类似于updated_atDESC

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

现在,我正在考虑在 、 和 上使用索引readuser_id优化updated_at获取和排序,但这是否意味着整个索引将在

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

?

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

4

1 回答 1

2

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

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

我不知道更新索引是否非常昂贵,但由于 MySQL 索引默认情况下是一棵树,如果read更改引擎必须在user_id叶子下运行,因此可能会降低影响。

尽管如此,您可以只使用索引user_id.updated_at并保留 MySQL 过滤器read,大多数情况下,从表中排序数据比过滤成本更高。

于 2012-10-07T09:32:26.277 回答