我正在尝试向我的 MySQL 数据库添加索引,因为系统使用的统计数据库查询速度太慢。
超过50000个元组的1分钟统计需要大约30分钟
起初,我尝试为每列添加一个索引,但这会导致数据库性能下降。因为查询使用了多列,所以我应该使用实际使用的索引。
我使用的实际查询如下简单版本。 条件可能会改变,
SELECT TIME,A,B,C,D,E,F,G FROM STAT_TBL1 WHERE TIME >='2019-07-04 16:00:00' AND TIME <='2019-07-04 16:59:59' AND H IN ('blah1') AND I IN ('blah2') ORDER BY TIME
SELECT TIME,A,B,C,D,E,F,G FROM STAT_TBL2 WHERE TIME >='2019-07-04 16:00:00' AND TIME <='2019-07-04 16:59:59' AND J IN ('blah3') AND K IN ('blah4') ORDER BY TIME
SELECT TIME,A,B,C,D,E,F,G FROM STAT_TBL3 WHERE TIME >='2019-07-04 16:00:00' AND TIME <='2019-07-04 16:59:59' AND H IN ('blah1') AND I IN ('blah2') AND J IN ('blah3') AND K IN ('blah4') ORDER BY TIME
我尝试创建以下索引:
CREATE INDEX IDX_LIST1_01 ON STAT_TBL1 (TIME)
CREATE INDEX IDX_LIST1_02 ON STAT_TBL1 (H)
CREATE INDEX IDX_LIST1_03 ON STAT_TBL1 (I)
CREATE INDEX IDX_LIST2_01 ON STAT_TBL3 (TIME)
CREATE INDEX IDX_LIST2_02 ON STAT_TBL3 (J)
CREATE INDEX IDX_LIST2_03 ON STAT_TBL3 (K)
CREATE INDEX IDX_LIST3_01 ON STAT_TBL3 (TIME)
CREATE INDEX IDX_LIST3_02 ON STAT_TBL3 (H)
CREATE INDEX IDX_LIST3_03 ON STAT_TBL3 (I)
哪个更好;添加每列索引还是多列索引?
最佳答案
具有多列的索引通常会更快。将日期用于多列索引以及通常用于过滤数据的一两个其他列。如果您使用许多不同的列来过滤数据,这些列因查询而异,则必须创建那么多索引。
关于mysql - 如何优化表中的索引列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56884006/