Главная страница
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.47 MB
Время: 0.012 c
14-88627
DRUG
2002-04-19 17:59
2002.05.27
Regedit


14-88619
lipskiy
2002-04-18 23:44
2002.05.27
Все, отправившие и отправящие записи в UBPFD, проконтролируйте!


6-88583
Serd_hhc
2002-03-18 11:11
2002.05.27
Как сделать что-то похожее на TServerSocket с помощью WinSock ?


3-88384
Lord For
2002-05-02 22:57
2002.05.27
Нормализация БД


1-88468
Blacgrin
2002-05-17 20:14
2002.05.27
Изминение размера окна