|
Какие существуют техники для оптимизации запросов по диапазону значений
|
|||
---|---|---|---|
#18+
Здравствуйте, Есть таблица "schedule" с обычным расписанием. Таблица с примерно такими полями: train_number type station time_departure time_arrival Создал два составных ключа: type + station + time_departure type + station + time_arrival Надо выбирать все рейсы по определенной станции за прошедшие несколько часов и за будущие несколько часов. Я так понимаю для запросов Код: sql 1.
составной ключ работать не будет. Первый вопрос: 1. Какие существуют техники для оптимизации запросов по диапазону значений ? Второй вопрос: 2. Работают ли составные индексы для запросов с конструкцией IN() ? Например я могу добавить поле: event_hours В это поле я могу записывать значение ЧАСА прибытия или отправления. Тогда я смогу сделать такие составные ключи: type + station + event_hours + time_departure type + station + event_hours + time_arrival И написать такой запрос: SELECT * FROM `schedule` WHERE `type`='arrival' AND `station` ='xxxx' AND `event_hours` IN(1559037600, .... ,1559080800) ORDER BY `time_arrival` ASC; Будет ли работать составной индекс ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2019, 19:49 |
|
Какие существуют техники для оптимизации запросов по диапазону значений
|
|||
---|---|---|---|
#18+
andrey-55555, FAQ: Нахождение записей, где заданное значение находится между значениями полей уже прочитали? andrey-55555Я так понимаю для запросов Код: sql 1.
составной ключ работать не будет.Формально - может быть использован имеющийся индекс (type,station,time_arrival). Причем как для доступа к записям, так и для их сортировки. Будет ли он использован на практике - зависит от многих факторов. Проще проверить, чем гадать. Смотрите план запроса. andrey-555552. Работают ли составные индексы для запросов с конструкцией IN() ?В принципе работают, но если это не последнее поле в индексе, то последующие поля использоваться уже не будут. Но это не точно, в последних версиях могли исправить. andrey-55555И написать такой запрос: SELECT * FROM `schedule` WHERE `type`='arrival' AND `station` ='xxxx' AND `event_hours` IN(1559037600, .... ,1559080800) ORDER BY `time_arrival` ASC; Будет ли работать составной индекс ?На доступ к записям - возможно, для сортировки - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2019, 23:22 |
|
Какие существуют техники для оптимизации запросов по диапазону значений
|
|||
---|---|---|---|
#18+
Спасибо, буду пробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 21:09 |
|
Какие существуют техники для оптимизации запросов по диапазону значений
|
|||
---|---|---|---|
#18+
miksoft Подскажите еще такой момент. Если в запросе: SELECT * FROM `schedule` WHERE `type`='arrival' AND `station` ='xxxx' AND `event_hours` IN(1559037600, .... ,1559080800) ORDER BY `time_arrival` ASC; убрать сортировку: SELECT * FROM `schedule` WHERE `type`='arrival' AND `station` ='xxxx' AND `event_hours` IN(1559037600, .... ,1559080800); в результатах выборки Mysql сохранит последовательность как в операторе IN ? То есть вначале будут результаты для 1559037600, а последними будут результаты для 1559080800. Верно ? В общем у меня еще идея: Например я могу добавить поле: event_hours В это поле я могу записывать значение ЧАСА прибытия или отправления С ТОЧНОСТЬЮ ПО 10 МИНУТ. Тогда я смогу сделать такие составные ключи: type + station + event_hours type + station + event_hours И написать такой запрос без сортировки: SELECT * FROM `schedule` WHERE `type`='arrival' AND `station` ='xxxx' AND `event_hours` IN(1559037600, .... ,1559080800); и если в результатах выборки Mysql сохранит последовательность как в операторе IN тогда в результатах будут рейсы ОТСОРТИРОВАННЫЕ по 10-и минутным интервалам. Это конечно не 100% сортировка, но примерная последовательность рейсов будет соблюдена. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 10:41 |
|
Какие существуют техники для оптимизации запросов по диапазону значений
|
|||
---|---|---|---|
#18+
И еще вопрос. Что эффективнее: сортировка результатов в MySQL или получить результаты без сортировки и сортировать данные уже в PHP ? Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 10:45 |
|
Какие существуют техники для оптимизации запросов по диапазону значений
|
|||
---|---|---|---|
#18+
andrey-55555 в результатах выборки Mysql сохранит последовательность как в операторе IN ? Нет, не сохранит. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 23:20 |
|
Какие существуют техники для оптимизации запросов по диапазону значений
|
|||
---|---|---|---|
#18+
andrey-55555Что эффективнее: сортировка результатов в MySQL или получить результаты без сортировки и сортировать данные уже в PHP ?В MySQL эффективнее, на мой взгляд. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 23:25 |
|
|
start [/forum/topic.php?fid=47&fpage=35&tid=1829123]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 139ms |
0 / 0 |