Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Проблема определения индекса для SELECT (Ivan) 29/07/2003 - 19:10:13
      Re: Проблема определения индекса для SELECT (Валентин) 30/07/2003 - 12:06:21
      Re: Проблема определения индекса для SELECT (Валентин) 30/07/2003 - 12:30:40
      Re: Проблема определения индекса для SELECT (Валентин) 30/07/2003 - 12:32:07
      Re: Проблема определения индекса для SELECT (Ivan) 30/07/2003 - 15:22:31
      Re: Проблема определения индекса для SELECT (Валентин) 31/07/2003 - 10:27:04
      Re: Проблема определения индекса для SELECT (Dinky) 31/07/2003 - 22:15:45

> Original message text:
> From: Ivan - 29/07/2003 - 19:10:13
> Subject:Проблема определения индекса для SELECT
> -----------------
> существует таблица pay
> в ней 1'500'000 записей
> по полям type (INT) и cur_date (DATETIME) существуют два индекса
>
> explain SELECT * from pay USE INDEX (cur_date) WHERE type=20 and cur_date>"20030729"
>
> Утром, при небольшой загрузке сервера mysql, индекс определяется правильно. Днем при 20-25 активних пользователях, которие корректируют данную таблицу ( добавление записей ),
> explain не показ. активного индекса и запрос виполняется
> долго ( более 40сек ).
>
> Где искать ошибку? Спасибо.
>


From: Валентин - 30/07/2003 - 12:30:40
Subject:Проблема определения индекса для SELECT
-----------------
Сорри, невнимательно прочитал вопрос.
Мускул строит план независимо от количества коннектов, потому что это делает демон коннекта своим парсером.
Варианты решения:
1) Укажите тип таблицы в форуме.
2) Возможно произошла фрагментация индекса. в свободное время перестройте индексы заново - результат будет.

Вопрос: если не указывать в запросе явное использование индекса, разве мускул не использует индексы на полях??? какая у вас версия мускула?

У меня практически на всех запросах мускул корректно использует индексы и ничего не забывает. Например запрос:
select PR.ID_Wares,PR.ID_ObjAccount,W.MainName as WaresMainName,O.MainName as ObjAccountMainName,
sum(PR.Volume)/IF(count(DISTINCT(PL.ID)),count(DISTINCT(PL.ID)),1)/IF(count(DISTINCT(PR1.ID)),count(DISTINCT(PR1.ID)),1) as CurrCount,
Sum(PL.Volume)/IFNULL(count(DISTINCT(PR.ID)),1)/IFNULL(count(DISTINCT(PR1.ID)),1) as OutCount,
sum(PR1.BeginVolume)/IFNULL(count(DISTINCT(PR.ID)),1)/IFNULL(count(distinct(PL.ID)),1) as InCount,
(sum(PR.Volume)/IF(count(DISTINCT(PL.ID)),count(DISTINCT(PL.ID)),1)/IF(count(DISTINCT(PR1.ID)),count(DISTINCT(PR1.ID)),1)+
IF(Sum(PL.Volume)/count(DISTINCT(PR.ID))/IF(count(DISTINCT(PR1.ID)),count(DISTINCT(PR1.ID)),1),
Sum(PL.Volume)/count(DISTINCT(PR.ID))/count(DISTINCT(PR1.ID)),0)-
IF(sum(PR1.BeginVolume)/count(DISTINCT(PR.ID))/count(distinct(PL.ID)),
sum(PR1.BeginVolume)/count(DISTINCT(PR.ID))/count(distinct(PL.ID)),0)) as CountOnDate

from `partsrest` PR, `wares` W,`objaccount` O
left join `partslines` PL on (PL.DocmDateDest>='2003.07.26' AND
PL.ID_Wares=PR.ID_Wares AND
PL.ID_ObjAccount=PR.ID_ObjAccount )
left join `partsrest` PR1 on (PR1.DocmDate>='2003.07.26' and
PR1.ID_Wares=PR.ID_Wares and
PR1.ID_ObjAccount=PR.ID_ObjAccount)
where PR.Volume>0 and W.ID=PR.ID_Wares and O.ID=PR.ID_ObjAccount
group by PR.ID_Wares,PR.ID_ObjAccount;

План выполнения:
table type possible_keys key key_len ref rows Extra
PR range idx_ID_Wares,idx_ID_ObjAccount,idx_Volume idx_Volume 12 Null 2,000 Using where; Using filesort
W eq_ref PRIMARY,ID PRIMARY 4 PR.ID_Wares 1,000
O eq_ref PRIMARY,ID PRIMARY 4 PR.ID_ObjAccount 1,000
PL ref idx_ID_Wares,idx_ID_ObjAccount idx_ID_Wares 5 PR.ID_Wares 1,000
PR1 ref idx_ID_Wares,idx_ID_ObjAccount,idx_DocmDate idx_ID_ObjAccount 5 PR.ID_ObjAccount 1,000 Using where



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
9869



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |