Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
7-88663
Sh-Oleg
2002-02-28 13:49
2002.05.27
работа с железом


1-88419
sj
2002-05-17 09:30
2002.05.27
Динамический массив как выходной параметр процедуры


3-88344
kan2002
2002-04-30 16:11
2002.05.27
Johnman по ZReport, у меня нету компоненты dxBar?


4-88682
Yaro
2002-03-27 23:56
2002.05.27
EnumProps | SetProp | GetProp


3-88373
ЕленаКв
2002-04-30 07:42
2002.05.27
В таблице есть поле summa в котором данные стрингового типа,




   Наверх