У меня есть две таблицы в моей базе данных, которые выглядят примерно так:Создание индексов SQL?
связи: (звонки из)
Timestamp FromIDNumber ToIDNumber GeneralLocation
2012-03-02 09:02:30 878 674 Grasslands
2012-03-02 11:30:01 456 213 Tundra
2012-03-02 07:02:12 789 654 Mountains
Движение:
Timestamp IDNumber Type X Y
2012-03-02 11:02:30 379 pedestrian 32 46
2012-03-01 12:32:41 654 pedestrian 54 56
2012-03-02 07:02:16 789 pedestrian 39 52
, и я хочу, чтобы запустить этот запрос:
SELECT c.senderID, c.timestamp, m.timestamp, m.x, m.y
FROM communication c
JOIN movement m
ON c.senderID = m.visitorID
WHERE m.timestamp >= c.timestamp
ORDER BY m.timestamp LIMIT 1;
В принципе, я хочу найти ближайшее движение ti mestamp для заданной временной метки связи.
Дело в том, что эти таблицы имеют миллионы записей, и мне нужно использовать индексы. Проблема в том, что я новичок в SQL, и я точно не знаю, как структурировать мои индексы .... мне нужно было бы один для m.timestamp и c.timestamp отдельно, как это?
CREATE INDEX mtstamp ON DBName.movement (timestamp);
CREATE INDEX ctstamp ON DBName.communication (timestamp);
Любая помощь будет принята с благодарностью, спасибо!
Ох ... Так что я в основном создавать индексы для 'm.timestamp',' 'c.timestamp', c.senderID',' m.visitorID', и композит, что вы писали? Вы просто используете составные индексы, когда используете оператор, которому нужны столбцы из двух таблиц? – ocean800
Вам не нужны индексы на 'senderID' и' visitorID', потому что префикс составного индекса также может использоваться как индекс сам по себе. – Barmar
Я так большое спасибо! Итак, я только что редактировал свой вопрос, мои индексы должны быть структурированы так, правильно? – ocean800