Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Firebird] Оптимальное число индексов в таблице, Требуется практическая рекомендация. 
V
    Опции темы
Gluttton
Дата 10.5.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



Доброго времени суток!

СУБД - FireBird 2.1.
В БД (помимо всего прочего) есть три таблицы со сходной структурой:

Код

ID   VARCHAR(18) PK
...
X_S BIGINT
Y_S BIGINT
X_F BIGINT
Y_F BIGINT


Где Х, Y - координаты (на всякий случай).
Таблицы заполняються однажды! В процесе эксплуатации БД, в 99% запросов будет осуществлен поиск одного поля в которое входит определенная точка. Т.е. просмотр всех четырех значений координат.
Объемы таблиц:
1 ~600 записей smile
2 ~100К записей
3 ~6М записей

Вопрос: Можно ли (и нужно ли) организовывать индексы по всем четырем значениям координат? Т.е. не будет ли от этого хуже (я часто в И-нете натыкаюсь на высказываения о том, что чрезмерное использование индексов ухудшает быстродействие)?


--------------------
Слава Україні!
PM MAIL   Вверх
Akella
Дата 11.5.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



индексы нужно организовывать только по тем полям, по которым будет производится поиск или сортировка. Думаю, что если в таблице 600 записей, то индекс может и не понадобится.
PM MAIL   Вверх
Gluttton
Дата 11.5.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



Цитата

индексы нужно организовывать только по тем полям, по которым будет производится поиск или сортировка


Меня просто смущает, тот факт, что из шести столбцов для таблицы объемом ~6М:
1 индекс - т.к. первичный ключ;
2 индекс - т.к. внешний ключ;
3-6 индексы - т.к. по этим полям будет осуществляться поиск.

Итого на 6 столбцов - 6 индексов. Это нормально? Серверу не поплохеет smile ?


--------------------
Слава Україні!
PM MAIL   Вверх
Deniz
Дата 12.5.2009, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Gluttton, если в поиске учавствуют всегда 2 поля (X и Y), то можно сделать один составной вместо 2.

Цитата(Gluttton @  11.5.2009,  02:08 Найти цитируемый пост)
Таблицы заполняются однажды!

Цитата(Gluttton @  11.5.2009,  02:08 Найти цитируемый пост)
я часто в И-нете натыкаюсь на высказывания о том, что чрезмерное использование индексов ухудшает быстродействие
ухудшение будет только в некоторых случаях:
1. Частая вставка/изменение данных - перестройка индекса + периодический сбор статистики для актуализации индекса.
2. Использование неэффективного индекса (например: пол работника). Чем ближе индекс к уникальному тем лучше.
Если у тебя первый пункт не предвидится, то и проблем не будет, почти.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Gluttton
Дата 12.5.2009, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



Цитата

пол работника


Сказывается усталость - час не мог понять зачем в БД хранить данные о половине работника smile !

Цитата

Gluttton, если в поиске учавствуют всегда 2 поля (X и Y), то можно сделать один составной вместо 2.


А и не знал, что так можно, спасибо за идею - буду пробовать!

Цитата

1. Частая вставка/изменение данных - перестройка индекса + периодический сбор статистики для актуализации индекса.
2. Использование неэффективного индекса (например: пол работника). Чем ближе индекс к уникальному тем лучше.


1-го не предвидиться. 2-ое условие тоже в общем выполняется (но вот комбинации X_S, Y_S и X_F, Y_F вообще уникальны).


--------------------
Слава Україні!
PM MAIL   Вверх
Deniz
Дата 12.5.2009, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(Gluttton @  12.5.2009,  10:29 Найти цитируемый пост)
А и не знал, что так можно, спасибо за идею - буду пробовать!
главное чтобы порядок полей в индексе и в where был одинаковый


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akella
Дата 12.5.2009, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Deniz @  12.5.2009,  06:24 Найти цитируемый пост)
Gluttton, если в поиске учавствуют всегда 2 поля (X и Y), то можно сделать один составной вместо 2.

Будет иметь значение, что используется в условии where:  and или or. Возможно придётся делать один составной индекс, и два раздельных.

Добавлено через 1 минуту и 32 секунды
Цитата(Gluttton @  10.5.2009,  23:08 Найти цитируемый пост)
Таблицы заполняються однажды! 

После заполнения пересчитывай статистику индексов.
PM MAIL   Вверх
Gluttton
Дата 16.5.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 7
Всего: 54



Поразмыслив над предложеным, взяв во внимание, что поиск в запросе осуществляется так:
Код

        WHERE SHEET.X_S<=:XF
        AND SHEET.X_F>:XS
        AND SHEET.Y_S<=:YF
        AND SHEET.Y_F>:YS

Создал вот такой индекс:
Код

CREATE INDEX SHEET_COORD ON SHEET(X_S, X_F, Y_S, Y_F);


Результат превзошел все мои ожидаения smile !

Akella и Deniz заслужено получают +1 за практический совет! Спасибо!


--------------------
Слава Україні!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.