Кодинг

Подписаться на эту рубрику по RSS

Таблицы против запросов

Опубликовано: 9 июля 2009.
Автор: koreec.

Попробовал перейти от схемы "таблица главная - таблица детальная" к схеме "один сложный 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, хотя там запрос отрабатывается несколько быстрее.

Внимательнее надо быть...

Опубликовано: 8 марта 2009.
Автор: koreec.

Под Вистой обнаружился странный косяк - синхронизация файлов онлайн-коллекции вылетала после первых 500 просканированных книг. При этом в той же Висте, но под отладчиком все работало "на ура". В Win XP этот баг вообще никак не проявлялся. Прям какой-то полтергейст...

В результате почти детективного расследования проблема была найдена, причем находилась она совсем в другом месте. При создании таблиц длина поля Title для книги устанавливалась в 100 символов, а делее по тексту везде было 255. И как только обнаруживалась книга с названием длинее 100 символов, падал индекс. Найти такую книги среди 115 тысяч методом тыка практически не реально, ну а синхронизация - это единственное место, где читаются все записи без исключения.

Самое непонятное в этой истории то, что проявлялось это безобразие исключительно в Висте, ХРюша на такие мелочи внимания не обращает.