MySQL与sum索引

MySQL与sum索引,mysql,performance,indexing,Mysql,Performance,Indexing,我有一张有一些数据的表格。为简单起见,它看起来像: id - auto_increment c1 - int c2 - int created - date 可能有很多数据 我获取数据的方式如下: 从创建的my_表中选择*>=DATE_SUB(现在(),间隔1小时)按c1+c2描述限制10排序 如何为c1+c2编制索引?可能吗?如果我要添加它,我的意思是它会减慢查询速度吗?您只需使用这两个字段创建一个索引即可。 比如: ALTER TABLE my_table ADD INDEX sumC1C

我有一张有一些数据的表格。为简单起见,它看起来像:

id - auto_increment
c1 - int
c2 - int
created - date
可能有很多数据

我获取数据的方式如下:

从创建的my_表中选择*>=DATE_SUB(现在(),间隔1小时)按c1+c2描述限制10排序


如何为c1+c2编制索引?可能吗?如果我要添加它,我的意思是它会减慢查询速度吗?

您只需使用这两个字段创建一个索引即可。 比如:

ALTER TABLE my_table ADD INDEX sumC1C2 (c1,c2)

唯一对您的应用有用的索引

SELECT *            -- I assume many fields here
    FROM my_table
    WHERE created >= DATE_SUB(NOW(), INTERVAL 1 HOUR) -- useful
    ORDER by c1 + c2 DESC   -- expressions cannot be indexed
    LIMIT 10         -- does not matter

有关创建最佳索引的更多讨论,请参阅我的


热销新闻:5.7可以创建和索引物化虚拟列,例如
(c1+c2)
。因此,在5.7中,以该列开始并以创建的
结尾的复合索引可能更好。

您是想按c1和c2列的总和排序,还是想按这两列的总和排序?@bonCodio,我想要这些的总和columns@Dave,你是什么意思?@arthur.borisow-你只接受了35%的问题答案。这通常表明你不在乎或没有坚持到底。你应该接受你过去问过的问题的正确答案,以提高你的“接受率”。我不理解否定的说法。如果两者都有索引,那么获取值的速度会更快,性能问题也会更少。我不是向下投票,但我怀疑索引不会有多大(积极)区别。查询可以在
created
上进行过滤,以向下过滤行数,但随后必须逐行从索引中选取值来进行求和(索引不在求和上,而是在部分上),很可能不会比直接从表中进行求和更快。
INDEX(created)