![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
План выполнения ХП [D6, FireBird]
Fom © (2004-01-30 13:20:00)
Мастаки, что может быть причиной не использования индекса?
есть 3 таблицы у всех есть одно и то же поле FieldX NUMERIC(10,0)
У всех трех таблиц есть индексы по этому полю
ХП выглядит так
BEGIN
FOR
SELECT T1.FIELD1, T2.FIELD4, T3.FIELD8, COUNT(T2.FIELD5)
FROM TABLE1 T1 JOIN TABLE2 T2 ON (T1.FIELDX = T2.FIELDX)
JOIN TABLE3 T3 ON (T1.FIELDX = T3.FIELDX)
WHERE T3.FIELD2 = "LALA"
GROUP BY T1.FIELD1, T2.FIELD4, T3.FIELD8
INTO ....
DO
SUSPEND;
END
Так вот посмотрев план в IBExpert видно что вторая таблица(TABLE2) не использует индекс
Что делать?
Fam (2004-01-31 10:18:00) [1]
Мастаки, что подскажете?
Fam (2004-01-30 17:18:00) [2]
к последнему моему меседжу - теперь не используется индекс первой таблицы :)
Fom (2004-01-30 17:15:00) [3]
2 Romkin
сделал
BEGIN
FOR
SELECT T1.FIELD1, T1.FIELDX
FROM TABLE1 T1
INTO ....
DO
BEGIN
FOR
SELECT T2.FIELD4
FROM TABLE2 T2
WHERE T2.FIELDX = :VARFILEDX
INTO ...
DO
SUSPEND;
END
END
всеравно не используется индекс. уже бекап-ресторе делал :(
Romkin (2004-01-30 16:21:00) [4]
НУ неужели трудно сделать for select только по одной таблице или двум первым таблицам? А внутри этого цикла выбирать недостающие данные?
Fom (2004-01-30 16:16:00) [5]
менял местами таблицы в запросе, и индекс удалял, и статистику собирал - пофиг
Alexander Vasjuk (2004-01-30 15:57:00) [6]
Fom (30.01.04 14:49) [7]
Я прочел
У меня были похожие грабли
Может статься так, что за отсуствием индекса T3.FIELD2 таблица Т3 все равно читается NATURAL, и тут все зависит от последовательности перечисления таблиц в запросе
Fom (2004-01-30 14:49:00) [7]
2 Alexander Vasjuk
внимательно прочтите вопрос
Academic © (30.01.04 14:44) [6]
ссори COUNT по третьей таблице
Alexander Vasjuk (2004-01-30 14:44:00) [8]
а по T3.FIELD2 индекс есть?
Academic (2004-01-30 14:44:00) [9]
если группировка нужна только для COUNT то
попробуй сделать так:
BEGIN
FOR
SELECT T1.FIELD1, T2.FIELD4, T3.FIELD8
FROM TABLE1 T1 JOIN TABLE2 T2 ON (T1.FIELDX = T2.FIELDX)
JOIN TABLE3 T3 ON (T1.FIELDX = T3.FIELDX)
WHERE T3.FIELD2 = "LALA"
INTO ....
DO
SELECT COUNT(TABLE2.FIELD5) FROM TABLE2
WHERE TABLE2.FIELDX = :T1.FIELDX (из Into)
INTO ....
SUSPEND;
END
Fom (2004-01-30 14:30:00) [10]
Не использует какой индекс?
да по полю FIELDX
Academic (2004-01-30 14:19:00) [11]
Не использует какой индекс?
по полю FIELDX?
Romkin (2004-01-30 14:18:00) [12]
Может, лучше переделать на без join, а из дополнительных таблиц брать в теле цикла данные?
Fom (2004-01-30 14:12:00) [13]
Мастаки, что посоветуете, жрет этот запрос, пакость, время и все-тут . :(