我正在为我的网站建立一个信息部分,客户端和管理员可以相互发送信息。我正在使用mysql。我只是好奇,我的数据库包含一个由以下列构成的表:
(邮件、收件人、发送者和时间发送)
每次发送消息时,它都会在数据库中创建一个新行,我想知道是否有更有效的方法来做到这一点。因为当用户登录到他们的帐户时,数据库将不得不查询会话表。我有它,所以它只显示最后的10。但是,当这个表中有更多的消息时,这会减慢速度。
我愿意回答你在评论中提出的任何问题。
发布于 2016-11-14 04:51:49
您可以在字段(可能是收件人、发件人和时间发送)的组合上创建索引,以加快对会话表的查找。如果您只对返回最新的、相关的消息感兴趣,那么排序索引(升序和降序)也可能有帮助。这是关于排序索引所做的事情的一个线程,关于订购日期索引的升序或降序是否重要的另一个线程。编辑:请参阅Rick的评论--显然,ASC/DESC的索引排序与MySQL无关。
如果您不熟悉数据库索引,那么这个StackOverflow线程很好地概述了它是什么,它做什么,为什么使用它,以及应该何时使用它。
这是在MySQL5.7中创建索引的参考页面。
发布于 2016-11-16 01:07:29
假设您希望将最后10条消息发送给登录用户,而不管发送方是谁,这是最佳的:
INDEX(recipient, time_send)然后使用
SELECT ...
WHERE recipient = <userid>
ORDER BY time_send DESC;这将是足够有效的。它可以稍微更有效率
PRIMARY KEY (recipient, time_send, ...)其中,...是使PK唯一所需的一切(MySQL中的一个要求)。
https://dba.stackexchange.com/questions/155157
复制相似问题