我是SQL数据库的新手,并创建了一个包含以下列的mySQL表:
MJD (FLOAT) - may be duplicate
WAVELNTH (LONG) - one of ~10 values
EXPTIME (FLOAT)
DATAMEAN (FLOAT)
FLUX (FLOAT)
典型条目如下:
数据库中的典型条目如下:
MJD 55329.017334,
WAVELNTH 131
EXPTIME 2.9
DATAMEAN 8.06
FLUX 2.78
数据库总共有157,502,333个条目。
我的查询简直令人难忘
SELECT (MJD, FLUX) FROM t
WHERE (MJD > value1 and MJD < value2 and WAVELNTH=value3)
现在,执行单个查询大约需要一分钟。我对索引非常陌生,因此希望在a)如何最好地添加索引和b)如何在查询中使用该索引方面寻求帮助。
答案 0 :(得分:2)
我建议使用以下索引:
CREATE INDEX idx ON yourTable (WAVELNTH, MJD, FLUX);
前两列WAVELNTH
和MJD
出现在WHERE
子句中,用于潜在地限制查询中需要考虑的记录数。没有更多信息,不清楚订单应该是什么。因此,以下索引可能会更好:
CREATE INDEX idx ON yourTable (MJD, WAVELNTH, FLUX);
我们在索引末尾包含FLUX
的原因是发现该列中的值。由于您的选择请求MJD
和FLUX
很可能任何索引都需要同时具有这两个列,以便MySQL使用索引。