我有一张超过200万行的表格。在我的脚本中,我需要在0.0001秒内完成查询。但现在大量的行增加到0.1秒。我的表结构如下:
chat_id | user_id | score
在每个查询中,我只想在聊天中获得用户的分数,并在查询中使用LIMIT 1。对于表开头的用户,查询在0.0001秒内完成,但对于表末尾的用户,有时需要0.5秒才能返回结果。 我正在考虑使用chat_ids将表拆分为多个表。例如:
chat1_table
user_id | score
chat2_table
user_id | score
这导致每个表中的行要少得多(如表中的1k行),查询速度会随着我的需要增加。 但我想知道有没有办法在一张桌子上获得相同的表现? 我听说过分区,但我不太了解它,而且我只有一个磁盘。
答案 0 :(得分:1)
我认为只需添加一个包含chat_id和user_id列的索引即可。实际上,如果(char_id,user_id)对始终是唯一的,则可以将它们变为复合主键。如果您的桌子还没有主键,您可以添加它:
ALTER TABLE tablename ADD PRIMARY KEY(char_id, user_id);