Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.27;
Скачать: CL | DM;

Вниз

Оптимизация запроса   Найти похожие ветки 

 
DieHard ©   (2002-04-30 12:19) [0]

Есть запрос типа
SELECT * FROM tab1
WHERE
c1 IN(SELECT tab2.c2 FROM tab2 WHERE tab2.c3 LIKE "ABC%")
Выборка на больших базах занимает значительное время
Нет ли способов оптимизации данного запроса?
Похоже вложенный SELECT выполняется для каждой записи.
Пробовал
SELECT * FROM tab1
LEFT JOIN tab2 ON (tab1.c1=tab2.c2)
WHERE
UPPER(c3) LIKE "ABC%"
- работает еще медленнее


 
Alexandr ©   (2002-04-30 12:23) [1]

еще медлее потомучто у тебя откуда-то взялся upper а значит Like идет не по индексу в втором случае.


 
kaif ©   (2002-04-30 12:32) [2]

Вообще запросы типа ...WHERE IN (SELECT... самые медленные и при построении структуры базы (самой задачи) перспективу таких запросов лучше не допускать.
Если уже ничего изменить нельзы - советую создавать временную таблицу и уничтожать после выборки данных.

CREATE TABLE TMP451423612 (...);

INSERT INTO TABLE TMP451423612 SELECT tab2.c2 FROM tab2 WHERE tab2.c3 LIKE "ABC%";

SELECT * FROM tab1, TMP451423612 WHERE tab1.c1 = TMP451423612.c2;

/*...здесь нужно вытянуть все это на клиент*/

DROP TABLE TMP451423612;

Тогда каждый запрос сработает 1 раз.


 
Johnmen ©   (2002-04-30 12:33) [3]

Просто убери LEFT в JOIN"е - и будет быстрее...
Тем более, что он не нужен по идеологии....


 
kaif ©   (2002-04-30 13:03) [4]

Вообще-то, у меня такое ощущение, что если с LEFT JOIN задача решается, то проще классический INNER JOIN:
SELECT * FROM tab1,tab2
WHERE tab1.c1=tab2.c2 and UPPER(c3) LIKE "ABC%"

Может, индексов (c1 и c2) в таблицах нет?
Все это, как правило, очень быстро должно работать...


 
Johnmen ©   (2002-04-30 13:07) [5]

>kaif © (30.04.02 13:03)
В том-то и дело, что с левыми/правыми джоинами она решается неверно, а с внутренними - верно...



Страницы: 1 вся ветка

Текущий архив: 2002.05.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
7-88640
Artis2000
2002-02-28 20:12
2002.05.27
Где взять процедуру в которая отсылает определенную сроку в ком-порт и получает ответ от сом-порта.???


4-88678
[HDD]John
2002-03-14 13:06
2002.05.27
Чтобы кнопки сами нажимались :)


3-88382
suds
2002-05-02 20:02
2002.05.27
НАРОД !!! Кто нить добавлял динамические поля


1-88413
Keymaster
2002-05-16 18:37
2002.05.27
Как отключить Memo?


3-88391
Ser_Kham1
2002-04-29 10:44
2002.05.27
неприятности с ADO