|
MySQL.RU - Webboard
Вернуться
Почему не используются индексы (Bod2000) 15/01/2003 - 19:28:55
Re: Почему не используются индексы (Dinky) 16/01/2003 - 19:55:21
Re: Почему не используются индексы (Bod) 17/01/2003 - 14:31:47
Re: Почему не используются индексы (Dinky) 17/01/2003 - 20:00:56
Re: Почему не используются индексы (vi.k) 19/01/2003 - 13:08:39
Re: Почему не используются индексы (Bod2000) 20/01/2003 - 13:41:22
Re: Почему не используются индексы (vi.k) 20/01/2003 - 15:50:23
Re: Почему не используются индексы (Dinky) 20/01/2003 - 17:59:03
> Original message text:
> From: Bod2000 - 15/01/2003 - 19:28:55
> Subject:Почему не используются индексы
> -----------------
> Hi All!
> Возникла интересная ситуация - оптимизатор не использует индексы.
>
> Имеем:
> - MySQL 3.23.51
> 2 таблицы A и B
> Запрос:
> надо получить список покупателей (табл. А) которые делали заказы (табл. B) у магазина или если у них выставлен признак A.Поле2
> select A.поле1
> from A,B
> where (A.Поле1=B.Поле1 and B.Поле2=Значение) or (A.Поле2=Значение)
> group by A.Поле1
>
> A.Поле1 и B.Поле1 являются primary key для своих таблиц
> A.Поле2 и Б.Поле2 проиндексированы отдельными индексами.
> ни один из индексов не используется.
>
> Вопрос - Почему.
>
From: vi.k - 19/01/2003 - 13:08:39
Subject:Почему не используются индексы
-----------------
> (users.id_u=zakaz.id_u and zakaz.id_s=1) or (users.crm_owner=1)
Сразу скажу, что думать особо не хочется. То что увидел с первого взгляда, о том и сужу.
Пытаюсь перевести
Если условие совпадает то выдать:
всех пользователей которые делали заказ № 1 и плюс декартово произведение всех пользователей, у которых crm_owner=1, на ВСЕ заказы из таблицы zakaz?
Не понимаю, зачем это могло бы понадобиться.
Может на самом деле нужно так:
(users.id_u=zakaz.id_u) and (zakaz.id_s=1 or users.crm_owner=1)
Выдать всех пользователей, делавших заказы № 1, а также тех пользователей, у которых crm_owner=1
Разница надеюсь заметна...
Если я прав, то в дальнейшем рекомендую писать так (чтоб не было путаницы):
select users.id_u
from users INNER JOIN zakaz ON users.id_u=zakaz.id_u
where zakaz.id_s=1 or users.crm_owner=1
group by users.id_u;
или
(если названия полей, по которым ведётся объединение таблиц, совпадают)
select users.id_u
from users INNER JOIN zakaz USING (id_u)
where zakaz.id_s=1 or users.crm_owner=1
group by users.id_u;
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
6311
|
|