Заказ по оптимизации

0

Я выполняю запрос в двух больших таблицах, но когда добавляю один столбец для сортировки (ps. start_time asc), мой запрос мертвый затор и занимает около 25 млн. Долл., Без этого столбца, занимает 1 сек. Я делюсь своим выражением sql:

SELECT  
    'ji'.'jobsId'         AS 'jobsId',
    'ji'.'fkCompanyId'    AS 'fkCompanyId',
    'ji'.'routeNumber'    AS 'routeNumber',
    'ji'.'fromStop'       AS 'fromStop',
    'ji'.'toStop'         AS 'toStop',
    'ji'.'schDeptTime'    AS 'schDeptTime',
    'ji'.'schArrTime'     AS 'schArrTime',
    'ji'.'run'            AS 'run',
    'ji'.'scheduleCode'   AS 'scheduleCode',
    'ji'.'driverDeptTime' AS 'driverDeptTime',
    'ji'.'driverArrTime'  AS 'driverArrTime',
    'ji'.'serviceType'    AS 'serviceType',
    'ji'.'days'           AS 'days',
    'ji'.'busNumber'      AS 'busNumber',
    'ji'.'hrNumber'       AS 'hrNumber',
    'ji'.'DriverName'     AS 'DriverName',
    'ps'.'start_time'     AS 'start_time',
    'ps'.'start_location' AS 'start_location',
    'ps'.'start_areas'    AS 'start_areas',
    'ps'.'passenger_scan' AS 'passenger_scan',
    'ji'.'fkCityId'       AS 'fkCityId',
    'ji'.'City'           AS 'City',
    'ji'.'date'           AS 'date'
FROM ('passenger_scan' 'ps'
   JOIN 'jobs_import' 'ji' USE INDEX(jobs_date)  
     ON (('ji'.'busNumber' = 'ps'.'busInfo')))
WHERE DATE BETWEEN '2018-d03-01' AND '2018-03-31'
ORDER BY ji.'date' DESC, ji.'City' ASC ,  ji.'routeNumber' ASC  -- ,'ps'.'start_time' asc

План выполнения без нужной колонки сортировки

План выполнения с нужной колонкой сортировки (ее проблема)

Индексы по обеим таблицам (все столбцы, индексированные в порядке по условию)

  • 1
    Индекс силы - это то, что не следует использовать легкомысленно. Используйте его, только если вы уверены, что ваш путь лучше, чем оптимизатор запросов.
  • 1
    Пожалуйста, разместите план запроса
Показать ещё 1 комментарий
Теги:

1 ответ

0

Ваши поля соединения должны быть проиндексированы в порядке оптимизации. Пожалуйста, проверьте, нет ли ps. start_time индексируется

  • 0
    ps.start_time индексируется
  • 0
    Каков тип поля ps.start_time, потому что строковый тип может не работать
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню