MySQL Left Join с Order By на большой таблице является медленным, несмотря на использование индексаMySql

Форум по Mysql
Ответить Пред. темаСлед. тема
Anonymous
 MySQL Left Join с Order By на большой таблице является медленным, несмотря на использование индекса

Сообщение Anonymous »

Я сталкиваюсь с проблемой производительности в MySQL при использовании левого соединения в сочетании с Order by в соединенном столбце.

Код: Выделить всё

-- organization: ~6,000 rows
CREATE TABLE organization (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
headquarterId INT,
-- other fields omitted
FOREIGN KEY (headquarterId) REFERENCES city(id)
);

-- city: ~150,000 rows
CREATE TABLE city (
id INT PRIMARY KEY AUTO_INCREMENT,
cityName VARCHAR(255) NOT NULL,
-- other fields omitted
INDEX idx_city_name (cityName DESC, id)
);
The Problem
I have a more complex query that includes:

[*]Multiple LEFT JOINs (around 4),
[*]Several subqueries in both the SELECT and WHERE Clauses,
Ограничение 15 для страниц. 300–500 мс .
Вот упрощенная версия запроса:

Код: Выделить всё

SELECT *
FROM organization
LEFT JOIN city ON city.id = organization.headquarterId
ORDER BY city.cityName DESC;
Что мне нужна помощь с

Почему этот запрос все еще медленный , несмотря на индекс on city.cityname ? Соединенные таблицы? < /li>
перестройте запрос или предварительное сортирование с помощью подборочной помощи?-> Sort row IDs: city.`cityName` DESC (actual time=96.1..99.2 rows=9133 loops=1)
-> Table scan on (cost=5053..5170 rows=9143) (actual time=82.6..86.1 rows=9133 loops=1)
-> Temporary table (cost=5053..5053 rows=9143) (actual time=82.6..82.6 rows=9133 loops=1)
-> Nested loop left join (cost=4139 rows=9143) (actual time=0.0893..21.9 rows=9133 loops=1)
-> Table scan on organization (cost=939 rows=9143) (actual time=0.072..10.4 rows=9133 loops=1)
-> Single-row index lookup on city using PRIMARY (id=organization.headquarterId)
(cost=0.25 rows=1) (actual time=0.001..0.00103 rows=1 loops=9133)

< /code>

Что я нашел до сих пор < /h3>

Я читал, что индексы на соединенных столбцах не всегда используются < /strong> для < /code>, особенно когда сортировка столбца поступает в таблице соединений. Desc < /code> и id < /code>). < /Li>
Сорт требует времени из -за filesort < /strong> в плане запроса. < /Li>
< /ul>

фрагмент медленного плана



Подробнее здесь: https://stackoverflow.com/questions/795 ... ndex-usage
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «MySql»