CREATE INDEX myindex ON mytablename (co1l, col2, col3, col4)
PostgreSQL
не поддерживает кластеризованные или покрывающие индексы.
Обновление:
Для этого запроса вам необходимо создать предложенный индекс:
SELECT this_.id as id0_0_,
this_.device_id as device2_0_0_,
this_.time_id as time3_0_0_,
this_.gps_detail_id as gps4_0_0_
FROM DataMessage this_
WHERE this_.time_id = 65536
AND this_.device_id = 32768
CREATE INDEX ix_datamessage_time_device_id_detail ON datamessage (time_id, device_id, id, gps_detail_id)
Однако ваши таблицы кажутся мне слишком нормализованными.
Вы можете хранить год, месяц и день в одном поле INT
в своей таблице. Это спасет вас от присоединения.
Может быть смысл хранить DataMessage
и GpsDetails
в отдельных таблицах, если либо GpsDetails
редко связаны с DataMessage
(то есть gps_details_id
часто устанавливается на NULL
), либо запись сведений GPS может быть разделена между несколькими сообщениями данных.
Если это не так, то лучше перенести данные GPS в таблицу сообщений данных.