Здравствуйте. Необходимо индексировать базу, хотя бы по внешнему ключу. Какой метод доступа индексации лучше всего выбрать? И хотелось бы узнать как часто обновляются индексы. И можно ли задать расписание для обновления индексов?
Заранее, спасибо.
"Методами доступа (access methods,AM), обычно, называют организацию (структуру) индексного файла и методы работы с ней". Думаю для индексации числовых (integer) вполне достаточно B-tree.?
Спасибо за ссылки, почитаю.
Извините,за может быть простые/глупые вопросы(в этом деле новичок). Но еще хотелось бы узнать:
-индексировать таблицы какого размера(кол-во строк) нужно или надо смотреть не только на это.
-какие запросы или какие таблицы использовать, чтобы было проще определить внешние ключи у всех таблиц.
>Думаю для индексации числовых (integer) вполне достаточно B-tree.?
Думаю, в 99% случаев вы можете смело положиться на выбор типа индекса (то что вы называете методом доступа) самим PostgreSQL. Специальные типы индексов обычно требуются в очень специальных случаях.
> -индексировать таблицы какого размера(кол-во строк) нужно или надо смотреть не только на это.
Индексируют не таблицы, а поля (колонки) в этих таблицах. Необходимость индекса определяется не столь размером таблицы, сколько теми запросами, которые вы будете выполнять к данной таблице. В простейшем случае, если есть, например, база телефонных номеров, с полями номер_телефона, фамилия, имя, отчество, то понятное дело, что надо строить индексы по полям "номер_телефона" и "фамилия", но не по полям "имя" и "отчество", потому что в 99,99% случаев мы либо ищем номер по фамилии, либо фамилию по номеру, значит и индексы нужны именно для этих полей.
>-какие запросы или какие таблицы использовать, чтобы было проще определить внешние ключи у всех таблиц.
Это зависит от стурктуры вашей БД. Вообще-то говоря, когда вы создаёте структуру БД, а затем нормализуете её до 3-й нормальной формы или до Нормальной Формы Бойса-Кодда, то уже становится понятным где и какие будут внешние ключи. Это азы теории реляционных БД, которые вы можете почитать, например здесь: http://postgresql.ru.net/doc/dbguide/index.html
Возможно, я неправильно выразился:
по 2 пункту: как видно из темы, индексироать собирусь поля которые яв-ся внешними ключами, т.к. думаю по ним как раз таки частые запросы идут. Все же хотелось знать поля с размером какой таблицы индексировать. ведь для маленькой таблицы ставить индекс ни то что бесполезно, а то что время выполнения запроса может увеличится
по 3 пункту: Как раз таки и хотелось узнать структуру имеющиеся бд. Хотел собрать инфо о таблицах и ее внешних ключах. Можно в консоли psql набрать команду "\d table_name" и выведится вся информация о данной таблице. Но по одиночки рассматриваь таблицу не хотел, т.к. интересовали только внешние ключи для автоматического создания запросов "create index" и думал может как то можно воспользоваться таблицами "pg_..." . По этому пункту вопросов больше нет, т.к. все таки воспользовался командой "\d"
>по 2 пункту: как видно из темы, индексироать собирусь поля которые яв-ся внешними ключами,
Как по внешним так и по первичным ключам индексы строятся PostgreSQL автоматически. Т.е. как только вы объявляете какое-либо поле внешним ключём, по нему сразу же без вашего участия будет построен индекс.
>Как по внешним так и по первичным ключам индексы строятся PostgreSQL автоматически
Автматически создаются индексы по внешнему ключу, в том случае, если внешний ключ-уникальный. В моем случае внешние ключи не уникальны, а , соответственно, нет индексов на эти поля
Какой метод доступа
Какой метод доступа индексации лучше всего выбрать?
Поясните, что вы имеете в виду?
По остальным вопросам читайте:
http://postgresql.ru.net/manual/indexes.html
http://postgresql.ru.net/manual/sql-vacuum.html
http://postgresql.ru.net/manual/routine-vacuuming.html
"Методами доступа (access
"Методами доступа (access methods,AM), обычно, называют организацию (структуру) индексного файла и методы работы с ней". Думаю для индексации числовых (integer) вполне достаточно B-tree.?
Спасибо за ссылки, почитаю.
Извините,за может быть простые/глупые вопросы(в этом деле новичок). Но еще хотелось бы узнать:
-индексировать таблицы какого размера(кол-во строк) нужно или надо смотреть не только на это.
-какие запросы или какие таблицы использовать, чтобы было проще определить внешние ключи у всех таблиц.
>Думаю для индексации
>Думаю для индексации числовых (integer) вполне достаточно B-tree.?
Думаю, в 99% случаев вы можете смело положиться на выбор типа индекса (то что вы называете методом доступа) самим PostgreSQL. Специальные типы индексов обычно требуются в очень специальных случаях.
> -индексировать таблицы какого размера(кол-во строк) нужно или надо смотреть не только на это.
Индексируют не таблицы, а поля (колонки) в этих таблицах. Необходимость индекса определяется не столь размером таблицы, сколько теми запросами, которые вы будете выполнять к данной таблице. В простейшем случае, если есть, например, база телефонных номеров, с полями номер_телефона, фамилия, имя, отчество, то понятное дело, что надо строить индексы по полям "номер_телефона" и "фамилия", но не по полям "имя" и "отчество", потому что в 99,99% случаев мы либо ищем номер по фамилии, либо фамилию по номеру, значит и индексы нужны именно для этих полей.
>-какие запросы или какие таблицы использовать, чтобы было проще определить внешние ключи у всех таблиц.
Это зависит от стурктуры вашей БД. Вообще-то говоря, когда вы создаёте структуру БД, а затем нормализуете её до 3-й нормальной формы или до Нормальной Формы Бойса-Кодда, то уже становится понятным где и какие будут внешние ключи. Это азы теории реляционных БД, которые вы можете почитать, например здесь:
http://postgresql.ru.net/doc/dbguide/index.html
По 1 пункту:
По 1 пункту: спасибо
Возможно, я неправильно выразился:
по 2 пункту: как видно из темы, индексироать собирусь поля которые яв-ся внешними ключами, т.к. думаю по ним как раз таки частые запросы идут. Все же хотелось знать поля с размером какой таблицы индексировать. ведь для маленькой таблицы ставить индекс ни то что бесполезно, а то что время выполнения запроса может увеличится
по 3 пункту: Как раз таки и хотелось узнать структуру имеющиеся бд. Хотел собрать инфо о таблицах и ее внешних ключах. Можно в консоли psql набрать команду "\d table_name" и выведится вся информация о данной таблице. Но по одиночки рассматриваь таблицу не хотел, т.к. интересовали только внешние ключи для автоматического создания запросов "create index" и думал может как то можно воспользоваться таблицами "pg_..." . По этому пункту вопросов больше нет, т.к. все таки воспользовался командой "\d"
>по 2 пункту: как видно из
>по 2 пункту: как видно из темы, индексироать собирусь поля которые яв-ся внешними ключами,
Как по внешним так и по первичным ключам индексы строятся PostgreSQL автоматически. Т.е. как только вы объявляете какое-либо поле внешним ключём, по нему сразу же без вашего участия будет построен индекс.
>Как по внешним так и по
>Как по внешним так и по первичным ключам индексы строятся PostgreSQL автоматически
Автматически создаются индексы по внешнему ключу, в том случае, если внешний ключ-уникальный. В моем случае внешние ключи не уникальны, а , соответственно, нет индексов на эти поля
Не случайно внешний ключ
Не случайно внешний ключ считается ограничением целостности, а единственный способ обеспечить наличие значений внешнего ключа в таблице, на которую он ссылается - это создание индекса.
http://postgresql.ru.net/manual/ddl-constraints.html#DDL-CONSTRAINTS-FK