Кодинг
Подписаться на эту рубрику по 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, хотя там запрос отрабатывается несколько быстрее.
Внимательнее надо быть...
Под Вистой обнаружился странный косяк - синхронизация файлов онлайн-коллекции вылетала после первых 500 просканированных книг. При этом в той же Висте, но под отладчиком все работало "на ура". В Win XP этот баг вообще никак не проявлялся. Прям какой-то полтергейст...
В результате почти детективного расследования проблема была найдена, причем находилась она совсем в другом месте. При создании таблиц длина поля Title для книги устанавливалась в 100 символов, а делее по тексту везде было 255. И как только обнаруживалась книга с названием длинее 100 символов, падал индекс. Найти такую книги среди 115 тысяч методом тыка практически не реально, ну а синхронизация - это единственное место, где читаются все записи без исключения.
Самое непонятное в этой истории то, что проявлялось это безобразие исключительно в Висте, ХРюша на такие мелочи внимания не обращает.