Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Я создал и использовал составной индекс
int ClientID;
DATETIME ServerPayCompleteTime;
на простом запросе всё хорошо ;
SELECT *
FROM `poltishokkzarchivedb`.`transaction_payed` t
where t.ClientID = 1 and t.ServerPayCompleteTime > '2014-03-01';
# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', 't', 'range', 'client_time', 'client_time', ?, NULL, '3347', 'Using where'
но как только используется дополнительная таблица (`termid`) с 1-ой записью:
SELECT
*
FROM
`poltishokkzarchivedb`.`transaction_payed` t, `test`.`termid` i
where t.ClientID = i.termid and t.ServerPayCompleteTime > '2014-03-01';
# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
'1', 'SIMPLE', 't', 'ref', 'client_time', 'client_time', ?, 'test.i.termid', '18476', 'Using where'
всё плохо.
т.е используется только половина индекса. на большой таблице это получается очень долго.
Можно ли что-нибудь сделать? Сейчас я явно запрещаю использование этого индекса.
Когда для "ClientID" был примари индекс (без составного индекса) то , как ни странно, этот запрос выполнялся за приемлемое время.
Неактивен
А какая у вас версия? Судя по 'Using where' вместо ожидаемого 'Using index condition' устаревшая.
Можно попробовать переписать в виде
Неактивен
и имею две версии:
5.046 боевая
5.6 кандидат для обновления
для 5.6:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,t,index,client_time,client_time,9,NULL,10001,"Using where; Using index; Using join buffer (Block Nested Loop)"
устаревшая. написал:
похоже да, ошибка реализации
А отчего у вас key_len показывает знак вопроса? написал:
Это артефакт использования инструмента 5.6 для базы 5.0 - если нативным смотреть тогда key_len = 5
Можно попробовать переписать в виде написал:
без разницы, в боевом режиме поля явно указываются. (опробовал)
Неактивен
5.0.45-community-nt-log
Неактивен
Иней написал:
без разницы, в боевом режиме поля явно указываются. (опробовал)
Тут идея была в переносе условия на t.ServerPayCompleteTime из where в join. Емнип, это раньше помогало, но могу ошибаться. Тогда только обновление.
Неактивен
Страниц: 1