Таблицы против запросов
Просмотров: 434.
Подписаться на комментарии по RSS.
Попробовал перейти от схемы "таблица главная - таблица детальная" к схеме "один сложный SQL запрос". На примере выборки книг одного автора это выглядит так - Таблица авторов (главная) - Список авторов (обеспечивает отношение одна книга один автор и наоборот) - Таблица книг. В MyHomeLib используются три соотвественно связанных компонента TTable. Если заменить это на SQL, получится трижды вложенный запрос типа
Select * FROM Books WHERE Id IN
(Select BookID FROM Author_List WHERE AuthID IN
(SELECT ID FROM Authors WHERE Name = "Петя"));
Так вот, в AbsoluteDB второй вариант на одной и той же базе работает в десятки раз медленнее! Видимо, нечто аналогичное происходит и в Firebird, хотя там запрос отрабатывается несколько быстрее.
Комментариев: 2
Select B.* FROM Books B, Author_List AL, Authors A WHERE B.Id = AL.BookID AND AL.AuthID = A.ID AND A.Name = "Петя";
вроде не ошибаюсь. Если на это дело построить индексы, то быстро должно работать. затраты на временные таблицы и сортировку?
в итоге в поиске так и сделал,действительно сильно быстрее получается на тех же самых индексах. а вот построение дерева через жестко связанные таблицы все равно быстрее