gpt4 book ai didi

mysql - 水平分区具有两个索引的 mysql 表

转载 作者:行者123 更新时间:2023-11-29 01:04:07 25 4
gpt4 key购买 nike

我有一个 mysql 表,用于存储用户对不同项目的评分。它具有以下字段:

  • id (int, pk)
  • 用户 ID(整数)
  • 项目编号(整数)
  • 评分( float )
  • 时间戳(整数)

和以下索引:

  • (userId, rating):用于查询特定用户已评价的所有项目
  • (itemId, rating):用于查询所有对特定项目进行评级的用户

此表有超过 1000 万行。为了使其更具可扩展性,我想执行水平分区。特别是,我打算将表分区为 20 个表:

  • tbl_rating_by_item_0:存储itemId以0结尾的评分
  • tbl_rating_by_item_1:存储itemId以1结尾的评分
  • ……
  • tbl_rating_by_item_9:存储itemId以9结尾的评分

  • tbl_rating_by_user_0:存储userId以0结尾的评分
  • tbl_rating_by_user_1:存储userId以1结尾的评分
  • ……
  • tbl_rating_by_user_9:存储userId以9结尾的评分

我们的想法是,当通过 itemId 查询时,我们从 tbl_rating_by_item_itemId 读取,当通过 userId 查询时,我们从 tbl_rating_by_user_userId 读取。缺点是每当我想插入或删除评级时,我需要从两个表中插入或删除。

还有其他解决办法吗?

最佳答案

您尝试过索引吗?创建两个复合索引

 INDEX name1 (rating,userid)
INDEX name2 (rating,itemId)

可能有助于提高性能。

还要考虑表分区。看看Mysql able partitioning这比实际创建两个单独的表要好。

关于mysql - 水平分区具有两个索引的 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12874062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com