1

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

id - auto_increment
c1 - int
c2 - int
created - date

可能有很多数据

我获取数据的方式是这样的:

SELECT * FROM my_table WHERE created >= DATE_SUB(NOW(), INTERVAL 1 HOUR) ORDER by c1 + c2 DESC LIMIT 10

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

4

2 回答 2

0

唯一有用的索引

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

INDEX(created)

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

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

于 2015-11-26T07:45:41.350 回答
-1

您可以只创建一个包含两个字段的索引。就像是:

ALTER TABLE my_table ADD INDEX sumC1C2 (c1,c2)
于 2012-11-19T15:02:42.670 回答