индексация mysql - объединение двух таблиц - PullRequest
0 голосов
/ 14 ноября 2011

У меня есть таблица T1, в которой 2 столбца - c1 и c2. Это столбцы ссылок внешнего ключа на col c3 в таблице U1.Запрос имеет что-то вроде "select ....... from T1, U1 as Ux and U1 as Uy where T1.c1 = 'xyz' and T1.c1 = Ux.c3 and T1.c2 = Uy.c3"

Какой столбец, если он проиндексирован, дает наилучшие результаты.c1 один или комбинация c1 и c2 ??

Ответы [ 3 ]

0 голосов
/ 14 ноября 2011

как насчет объединения?

SELECT * FROM T1
INNER JOIN U1 ON U1.c3=T1.c1 AND U1.c3=T1.c2
WHERE T1.c1 = 'xyz'

Я не совсем понимаю, что вы пытаетесь сделать, но попытка получить что-либо от этого c1 и c2 должна быть одинаковой.

0 голосов
/ 14 ноября 2011

Пока ваш столбец "c1" является единственной частью запроса и находится в первой позиции индекса в случае составного индекса (c1, c2), он не будет иметь реального влияния. Это все равно будет оптимизировано. Если бы «c1» находился во второй позиции, ничего хорошего ... как это должно было бы быть по сути, циклически проходите через каждый c2 для соответствующего c1. Тем не менее, если бы ваш столбец c2 имел какое-то ужасное значение, например строку varchar 1000, он бы задохнулся, так как ему пришлось бы учитывать длину ключа индекса и дополнительную подкачку. Тем не менее, индексирование такой комбинации в любом случае не будет считаться распространенным.

0 голосов
/ 14 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...