![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
![]()
Здравствуйте!
(создал одну тему, чтобы не создавать мусор.) 1. При обращении к полям как лучше писать Dataset.FieldByName().Value или точно указывать типа данных Dataset.FieldByName().AsInteger/AsString/итд? Что это даёт? Какая разница? Как быстрее? 2. FB2.5 как можно сразу переименовать название индекса? IBexpert не позволяет этого сделать (нужно снимать все PK/FK). Можно как-то переименовать индекс без снятия PK/FK? 3. FB2.5 если поле BLOB =null много ли места в БД оно занимает? Что хуже (менее экономно) хранить поле типа varchar или blob? Varchar поле всегда даже если пустое занимает указанное пространство? (например 100символов) |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
1. Value типа Variant - неизбежные потери по скорости
3. Varchar занимает по факту + память для хранения длины этого факта. По blob-у поиска не сделаешь, да и выборка-запись помедленнее varchar. Смотреть нужно что предполагается хранить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 | ||||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Цитата:
Цитата:
Тут все скажут. Цитата:
I'm learning to live...
|
||||
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Ну не совсем нельзя, udf использовать прийдется и только символьный поиск. Но медленно - индекс не построишь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
А в Огнептичке нет полнотекстового поиска? В Оракле и Информиксе и даже Сиквеле такие индекса построить можно.
I'm learning to live...
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Sphinx есть, но это наружка. Возможно и другие примочки
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 78
|
![]()
1. Уточнение - то самый быстрый способ это [Dataset1.FieldByName().AsInteger:=D ataset2.FieldByName().AsInteger] ? Интересовало если например поле Integer, то быстрее будет если использовать .Value или .AsInteger ??? Иными словами если тип данных известен, то как быстрее передавать данные - универсальным Value или точным указанием типа данных ? При передаче с указанием типа данных не будет ли происходить каждый раз лишнее преобразование [.AsInteger - > ValueToInteger] ??
2. ![]() 3. То есть поле Varchar 1000 при кол-ве текста в 10 будет занимать всего 10 ?? Неужели стали сжимать текстовые строки ? Или всё же в самой БД под поле так и выделяется 100, просто вместо пробелов пусто ? Нужно хранить некий текст который может быть от 0 до 1000 символом - как это более экономично делать? Тестовым полем varchar или текстовым blob ? |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
![]()
3.
При названных условиях Varchar, конечно. По текстовым полям, длина значений которых не превышает (насколько помниться) 4 Кб, можно создавать индексы. Доступ ускоряется в разы. Важно для больших объемов. Если записей немного (5-10 тыс.) - это не так и актуально - лишние индексы не уменьшают энтропии. К слову о хранении данных в FB (кому то это еще важно). Страничная организация файлов в FB делает достаточно быстрым доступ к любому типу данных. Тип varchar не хранит все установленный для поля байты, только переданную строку и сжатие здесь ни причем. Разумеется, лишние символы обрезаются, если их больше чем зарезервировано для этого поля. ИМХО. Для современных процессоров с их памятью ловить микросекунды на одиночных операциях сравнения или присвоения (Dataset1.FieldByName().AsInteger:= Dataset2.FieldByName().AsInteger), по крайней мере, не ценить свое время. |
![]() |
![]() |
![]() |
#9 | |
Участник клуба
Регистрация: 07.07.2007
Сообщений: 1,518
|
![]() Цитата:
Код:
Код:
|
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уточнения по ассемблеру. | max-tasm | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 17.05.2010 17:43 |
Программа для уточнения корней уравнения (на DELPHI) | mast2xx | Помощь студентам | 2 | 21.03.2010 16:43 |
программа для уточнения корней уравнения (Delphi) | mast2xx | Помощь студентам | 0 | 20.03.2010 20:21 |
delphi 9 или delphi 2005 вопрос о работе | Doget | Компоненты Delphi | 0 | 07.07.2008 08:50 |
Помогите с подстановачными полями в Delphi | Ol'ga | Общие вопросы Delphi | 1 | 29.06.2008 13:58 |