Текущий архив: 2005.10.23;
Скачать: CL | DM;
ВнизПокритикуйте Найти похожие ветки
← →
Андрей Жук © (2005-10-04 15:16) [0]Универсальная функция построения дерева в Firebird 1.5
CREATE PROCEDURE GET_TREE (
INMEM_PID INTEGER,
INLEVEL INTEGER,
TABLE_NAME CHAR(32),
COLUMNID_NAME CHAR(32),
COLUMNPID_NAME CHAR(32))
RETURNS (
MEM_PID INTEGER,
MEM_ID INTEGER,
OUTLEVEL INTEGER,
IS_LEAF INTEGER)
AS
DECLARE VARIABLE CHILDID INTEGER;
DECLARE VARIABLE L_IS_LEAF INTEGER;
DECLARE VARIABLE SEQUEL VARCHAR(1024);
begin
SEQUEL = "select a."||:COLUMNID_NAME||" from " || :table_name || " a where a." || :columnpid_name || " = " || :InMEM_PID;
for EXECUTE STATEMENT SEQUEL into :ChildID
do
begin
MEM_PID = :InMEM_PID;
MEM_ID = :ChildID;
OutLevel = :InLevel + 1;
SEQUEL = "select count(1) from "||TABLE_NAME||" where "||:COLUMNID_NAME||"="||:mem_id;
EXECUTE STATEMENT SEQUEL INTO :l_is_leaf;
if (L_IS_LEAF=0) then
IS_LEAF=0;
else
IS_LEAF=1;
Suspend;
for select MEM_ID, OUTLEVEL, MEM_PID,IS_LEAF from GET_TREE
(:MEM_ID, :OutLevel, :table_name, :columnid_name, :columnpid_name)
into :MEM_ID, :OutLevel, :MEM_PID,:is_leaf
do
Suspend;
end
end
← →
Sergey_Masloff (2005-10-04 15:31) [1]>SEQUEL = "select count(1) from "||TABLE_NAME||" >where "||:COLUMNID_NAME||"="||:mem_id;
> EXECUTE STATEMENT SEQUEL INTO :l_is_leaf;
В лом проверять, посмотри сравнение с параметризованным "статическим" SQL по скорости. Должен дикие тормоза поиметь на нормальных данных. Оптимизатору ж каждый раз придется заново парсить команду. А на такого прода запросах на разбор и уходит 90% времени.
← →
Андрей Жук © (2005-10-04 15:36) [2]не знаю, 6-уровневое дерево из 300 эл-том строится за 765ms на Cel-1333.
Специальная процедура для такого же дерева (для одной таблицы)(используется в настоящее время) исполняется 234ms.
← →
Sergey_Masloff (2005-10-04 15:40) [3]Ну то есть в 2.5 раза тормознее ;-)
Если скорость приемлемая то почему и нет?
← →
Андрей Жук © (2005-10-04 15:45) [4]А если убрать параметр IS_LEAF то запрос будет выполняться 515ms
← →
Sergey_Masloff (2005-10-04 16:06) [5]Что-то медленно у тебя "статический" работает. Я сейчас посмотрел у меня 17-уровневое дерево 25000 элементов строится 1016 ms. 4-х уровневое 400 записей 15 ms. Никаких извивов все "в лоб" просто рекурсивный обход.
Может ты не то меряешь?
В любом случае повторю - если визуальных тормозов нет то вполне нормально. ИМХО все что до 1 секунды имеет право на жизнь ;-)
← →
Igorek © (2005-10-04 18:42) [6]> ИМХО все что до 1 секунды имеет право на жизнь ;-)
Все что можно оптимизировать должно умереть.
--
Я не понял что делает данный код?
← →
Андрей Жук © (2005-10-04 18:47) [7]Строит дерево, которое элементарно загрузить в элемент отображения
Страницы: 1 вся ветка
Текущий архив: 2005.10.23;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.04 c