Преобразование даты в дату - PullRequest
1 голос
/ 26 ноября 2010

У меня есть индексы для tbl1.date и tbl2.datetime. Когда я делаю следующее:

EXPLAIN SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl2.datetime = tbl1.date

tbl2.datetime индекс используется (как и ожидалось)

Очевидно, мне нужно преобразовать tbl2.datetime в дату, чтобы оператор SELECT работал в реальной жизни. Тем не менее, это не приводит ни к одному из используемых индексов:

EXPLAIN SELECT * FROM tbl1 LEFT JOIN tbl2 ON DATE(tbl2.date) = tbl1.date

Чего мне не хватает?

UPDATE: Я пробовал что-то подобное, но продолжаю получать синтаксическую ошибку

"# 1064 .... проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с 'SELECT * FROM tbl1 СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ tbl2 НА ДАТУ (ВЫБРАТЬ * ОТ как в строке 1 "

EXPLAIN SELECT * FROM tbl1 LEFT JOIN tbl2 ON DATE( SELECT * FROM (SELECT DISTINCT          
datetime FROM tbl2.datetime) as tempTable ) = quotes.GOOG.date

Ответы [ 2 ]

3 голосов
/ 26 ноября 2010

Чего мне не хватает?

Ничего - вы не можете изменить данные или тип данных и ожидать, что сможете использовать индекс.

При изменении для сравнения нет никакой связи между значением в индексе и значением, которое вы хотите / нужно использовать.Единственный вариант - сохранить значение таким образом, чтобы не потребовалось изменение, если вы хотите, чтобы индекс использовался.

0 голосов
/ 26 ноября 2010

Интересный вопрос. В качестве обходного пути я попытался выделить DATETIME с одной стороны условия JOIN ...

EXPLAIN SELECT * 
FROM tbl1
LEFT JOIN tbl2 ON tbl2.datetime
BETWEEN CONCAT( tbl1.date,  ' 00:00:00' ) AND CONCAT( tbl1.date,  ' 23:59:59' )

FWIW, это был провал.

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