gpt4 book ai didi

mysql - 求和列或新列

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:52 24 4
gpt4 key购买 nike

对于排名系统(在拥有数万用户的数据库中),我想通过三列的总和对用户进行排名:例如Points_APoints_BPoints_C。我想知道什么是更好的选择:

  • 每次访问排名页面,将所有列相加,计算用户排名
  • 使用三列的总和创建一个新列 Points_total(我会在每次其他列之一更新时更新总数)并按此 Points_total 对查询进行排序>.

每秒可能会多次请求排名页面,因此性能非常重要。第二种选择更快还是不推荐?

最佳答案

从 MySQL 5.7.6 开始,您可以创建生成列,这使您能够根据表中其他列中的其他值存储虚拟值。

CREATE TABLE tbl (
Points_A INT,
Points_B INT,
Points_C INT,
Points_total INT AS (Points_A + Points_B + Points_C)
);

生成的列定义具有以下语法:

col_name data_type [GENERATED ALWAYS] AS (expression)
    [VIRTUAL | STORED] [UNIQUE [KEY]] [COMMENT comment]
    [[NOT] NULL] [[PRIMARY] KEY]

您可以决定使用VIRTUALSTORED(取决于您的需要)。

从 MySQL 5.7.8 开始,您还可以添加 INDEXes on virtual columns ,所以在你的情况下 - 这正是你要找的东西(这样列中的值被索引)。

If you are using MySQL older than 5.7.8 and the ranking page is being accessed many times - I would suggest you to same the calculated value in specific column and add an index on that column.

关于mysql - 求和列或新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40951162/

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