Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2011, 17:34   #1
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
Вопрос Скорость обработки FB/IB select по boolean и varchar ?

Здравствуйте!
Имеет ли какой-либо смысл в плане скорости исполнения или уменьшения размера выделяемой памяти итп в случаях когда в одной таблице записаны разные группы признаков создавать отдельный признак указывающий на группу1 и группу2?
Пример - таблица Поставщики в ней могут быть Юрлица и Физлица, но в программе их нужно показывать раздельно, разделить выборку можно следующими способами:
where (ИНН is not null)
where (ФИО is null)
или добавить в таблицу отдельный boolean признак ЮрЛИЦО и записывать в него да/нет, соответственно при выборке:
where (ЮрЛИЦО=True)
Вопрос к тем, кто хорошо знает как работает FB/IB - есть ли какая-то существенная разница в этих 3х выборках по скорости, объёму выделяемой памяти, какая-то ещё разница?
delphicoding вне форума Ответить с цитированием
Старый 02.10.2011, 17:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
или добавить в таблицу отдельный boolean признак
Или просто сделать индексацию по функции с условием not null в полях строк.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2011, 18:16   #3
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Можно и так.
Но основной вопрос всё же остаётся - какой метод внутри СУБД обработает одинаковое кол-во записей быстрее? Сравнение по скорости:
varchar/integer/smallint is not null
varchar/integer/smallint is null
boolean=false
boolean=true
boolean is null
тк в разных СУБД бывают разные оптимизации и что быстро в одной СУБД может быть в разы медленнее в другой СУБД...

Последний раз редактировалось delphicoding; 02.10.2011 в 18:33.
delphicoding вне форума Ответить с цитированием
Старый 02.10.2011, 19:04   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Берешь таблицу записей на 500000 и проверяешь какой способ быстрей. Думаю разницы практичекски не будет в любой СУБД
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.10.2011, 19:19   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Думаю разницы практичекски не будет в любой СУБД
Уверен - если обрабатывать неиндексируемые поля, то обработка строк будет гораздо дольше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2011, 23:13   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Уверен - если обрабатывать неиндексируемые поля, то обработка строк будет гораздо дольше.
Для Access эта разница для неиндексированных полей почти неощутима - сотые доли секунды при выборке 50000 записей из таблицы в 100000 записей. Примерно такое же влияние оказывает NOT NULL. Наверняка у СУБД есть особенности анализа на NULL
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.10.2011, 08:26   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Наверняка у СУБД есть особенности анализа на NULL
Хм... Наверное ты прав. Строка строкой, но если она пуста то по всей строке он не побежит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.10.2011, 12:08   #8
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Это очевидно.
Хорошо, что разобрались с NULL.

Но что с Boolean - ведь в FB нет Boolean! А это INTEGER/SMALLINT с ограничением value in (0,1) - как обрабатывается INTEGER/SMALLINT в контексте =1/=0 ???

Вот тут-то мне и кажется, что быстрее должен быть NULL, чем "псевдо-boolean"...
И скорее всего никакие индексы не позволят в FB проверке на "псевдо-boolean" по скорости дойти до проверки на NULL

Но я в FB разбираюсь слабо, это только теория, поэтому и интересно было мнение настоящих профи знающих внутреннюю работу FB/IB !!!

Последний раз редактировалось delphicoding; 03.10.2011 в 12:12.
delphicoding вне форума Ответить с цитированием
Старый 04.10.2011, 09:16   #9
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

delphicoding, настоящие профи по FB/IB живут на ibase.ru
Вам туда.
Прик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В зависимости от выбора в Select изменить значения другого Select Tayfun HTML и CSS 3 18.08.2011 00:05
Select t1.N,t1.FIO,(select t2.acc from t2 where t2.type=1) from t1,t2 mavlon_m SQL, базы данных 2 17.09.2009 15:28
Скорость обработки операций Alex Cones Общие вопросы Delphi 8 05.06.2009 20:17
Как изменить в InterBase размер поля varchar(10) на varchar(20) tarakan1983 БД в Delphi 4 23.03.2009 15:35
Передача значения в <select></select> kkkggg Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 06.09.2007 00:26