【问题标题】:SQL Query speed and refinementSQL 查询速度和细化
【发布时间】:2016-11-22 16:04:40
【问题描述】:

所以我刚刚建立了一个数据库,它只包含一个包含以下字段的表:

key_value:保存一个密钥的 6 位代码

redeemed:如果密钥被赎回,布尔值

redeemed_by:谁兑换了它

redeemed_date:兑换时间

software_name:密钥相关的软件名称

我基本上从一个空数据库开始,然后当有人通过 PayPal 购买时,他们会获得自己的密钥并将其添加到数据库中。在此之后,他们打开一个应用程序,让他们输入他们的代码,然后在数据库中搜索并标记为已兑换,因此不能再次使用 - 这导致已兑换和未兑换的代码都在一个表中。

如果我要达到几千次购买,这会导致数据库严重变慢,甚至崩溃吗?如果它是一个更大的数字,比如 10,000 怎么办?

究竟有什么好的解决方案,即使我有另一张兑换钥匙的表,它也必须查看兑换表以查看它是否被兑换?

感谢大家的回答,我还在学习数据库和SQL!

【问题讨论】:

  • 如果您的 mysql 在 10,000 条记录方面存在问题,那么您是在一台严重过载和/或动力不足的机器上运行它。有数十亿条记录的 mysql 实例。

标签: php mysql sql-server database paypal


【解决方案1】:

我认为你的设计是合理的。您可能希望根据要运行的查询添加索引。 key_value 听起来像是一个很好的主键,它也可以作为更新兑换的索引。

正如 Marc B 所说,硬件是您唯一可能考虑的性能。

【讨论】:

    【解决方案2】:

    我会为此使用两张表:一张用于您指定的内容,另一张用作存档表,其中包含定期迁移已赎回/过期记录的作业。

    推理:该表的主要目的是为了赎回,而不是用作存档。随着时间的推移,随着在表中找到越来越多的已赎回记录,由于表中的所有“死木”,查找未赎回记录的性能开始变得越来越差。 (您认为 eBay 是否将所有正在进行的和已完成的拍卖都放在一张桌子上?)

    如果您仍然绝对需要“单表”解决方案,您可以轻松创建合并两个表的视图。

    此外,如果您设置了正确的主键,性能(暂时)不会很快下降,因为这会消除表扫描,这是您在记录量增长时所暗示的。

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 2018-11-19
      • 2014-08-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多