40
чтобы всё-таки получить очередное уникальное значение, сначала
потребуется увеличить значение генератора. Нужно создать запрос, получить
результат, обработать его в программе, и уже с ним генерить второй запрос
INSERT INTO catalog VALUES(, 'text value');таким образом получаем два
запроса к БД вместо одного, и два обработчика на стороне клиента. Иными
словами, получаем двойные накладные расходы на каждом запросе записи.
Элементарный и наиболее часто используемый запрос выбора всех
записей таблицы типа SELECT * FROM driver WHERE id = 1 сразу
возвращает все что нам нужно и цифровые и текстовые данные,но Firebird не
делает этого -вместо ожидаемого текста возвращается идентификатор
(BLOB_ID), с помощью которого (и дополнительного запроса!) можно
получить значение поля. а если всё-таки нужно получать текст, то полю
назначается другой тип: VARCHAR(32765). Как итог накладные расходы на
селект выростают в 4 раза. По сравнению с другими БД.
А нам как раз нужно совершать огромное количество именно SELECT.
Невозможно себе позволить такие накладные расходы. БД Firebird не
подходит однозначно.
Лучшая по результатам линейных SELECT всегда была и остается
MySql обгоняя любые другие БД. MySql проигрывает почти всем при
выполнении сложных составных запросов, требующих промежуточных
вычислений самой БД, но в программах документооборота таких нет. По
крайне мере всегда можно согласиться в одном или двух местах на некоторое
увеличение накладных расходов, но это не будут постоянные и
неоправданные расходы при всех SELECT которые неизбежны с Firebird.
Единственное преимущество Firebird в том что на него можно возложить
обработку запросов которые имеют данные связанные между собой, но
находящиеся в разных таблицах. В нем нет нет хранимых процедур,
триггеров и еще много чего. Но все это можно сделать внутри приложения.
Будет немного больше кода, но оно с лихвой окупается малыми накладными
расходами процессора, памяти, времени обработки в конце концов.