Новое в SQL - ускорение с помощью индексации - PullRequest
0 голосов
/ 03 января 2019

Я новичок в базах данных 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

Всего в базе 157502333 записей.

Мои запросы почти исключительны

SELECT (MJD, FLUX) FROM t 
WHERE (MJD > value1 and MJD < value2 and WAVELNTH=value3)

В настоящее время выполнение одного запроса занимает около минуты. Я очень плохо знаком с индексированием, поэтому надеялся на некоторую помощь в а) как лучше добавить индекс и б) как затем использовать этот индекс в моем запросе.

1 Ответ

0 голосов
/ 03 января 2019

Предлагаю следующий индекс:

CREATE INDEX idx ON yourTable (WAVELNTH, MJD, FLUX);

Первые два столбца WAVELNTH и MJD появляются в предложении WHERE и могут использоваться для потенциального ограничения количества записей, которые необходимо учитывать в запросе. Без дополнительной информации не ясно, каким должен быть порядок. Следовательно, следующий индекс может быть лучше:

CREATE INDEX idx ON yourTable (MJD, WAVELNTH, FLUX);

Причина, по которой мы включаем FLUX в конец индекса, заключается в том, что охватывает значения в этом столбце. Поскольку ваши запросы на выборку MJD и FLUX, скорее всего, любой индекс должен иметь оба этих столбца, чтобы MySQL мог использовать индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...