Проблема для оптимизации индекса MySQL - PullRequest
0 голосов
/ 19 октября 2018

У меня есть таблица MySQL примерно с 1,5 миллионами строк.Эта таблица содержит столбец с именем companies (integer), который содержит несколько различных значений (3 или 4), и еще один столбец с именем orders (varchar), который содержит множество различных значений (но некоторые идентичные).

Я создал несколькоиндекс столбца (тип INDEX) со столбцами companies и orders.

У меня есть простой запрос

SELECT * FROM TABLE1 WHERE companies = 1 AND orders = '344A7884'

Нет разницы во времени выполнения (около 4 секунд) при выполненииэтот запрос с реализованным индексом или без него.

Единственный способ найти время выполнения около 1 секунды - создать индекс только для «заказов» и выполнить следующий преобразованный запрос:

SELECT * FROM (SELECT * FROM TABLE1 WHERE orders = 34467884) RQ1 WHERE companies = 1

Это, кажется, не очень правильно.Может кто-нибудь объяснить мне это странное поведение и предложить лучший способ оптимизации индекса?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Если индексированный столбец является VARCHAR, тогда не проверяет его на число без кавычек.Например, если companies равно VARCHAR(99),

companies = 1  -- will scan the entire table (slow)
companies = '1'  -- can use the index (fast)

Для дальнейшего обсуждения укажите SHOW CREATE TABLE и EXPLAIN SELECT ...

Если companies, скажем, INT и orders - это VARCHAR, тогда

WHERE companies = 1 AND orders = '344A7884'

будет работать очень быстро с или из них:

INDEX(companies, orders)
INDEX(orders, companies)
0 голосов
/ 19 октября 2018

Конечно ошибка при создании индекса в первый раз.Проверим снова и посмотрим, появится ли эта проблема снова.Спасибо за комментарии.

...