Подскажите!!!

Antava
Дата: 26.12.2003 16:03:53
Нет возможности поекспереминтировать (((
Есть вопрос
Таблица не индексирована в результате запроса (временный интервал) просматривает все строки (около 10 миллионов)

Возник вопрос если проидексировать записи поймет ли запрос что временный интервал завершился ???
Shweik
Дата: 26.12.2003 22:08:42
[quot]
Таблица не индексирована в результате запроса (временный интервал) просматривает все строки (около 10 миллионов)
quot]
Не понятно если запрос - интервал это нечто подобное:
дата1>='1.11.2003' and дата2<='1.12.2003' ? Ну и как спрашивается индексирование может повлиять на это ? Индексы ни в одной СУБД не влияют на физический порядок записей и тем более на запросы - это скорее списки указателей на записи.
Либо я таки не вїехал в вопрос либо тебе нужно почитать книжки про SQL
вообще. :0)
Vel
Дата: 29.12.2003 10:11:31
Shweik, ты неправ. Физический порядок записей обеспечивается кластерными индексами. Есть ли такие в постгресе, не помню.

Antava
Как вариант можно использовать Partition Views по этому интрвалу.
Можешь просто наложить индексы и с помощью explain посмотреть ход выполнения запроса.
assa
Дата: 29.12.2003 11:45:27
если я праильно понимаю, надо проиндексировать именно поле с датой (временем). Тогда запрос будет просматривать "списки указателей на записи", причем, уточним г-на Швейка: _упорядоченные_ "списки указателей на записи" :0). Т.е. пользоваться методами быстрого поиска в упорядоченных наборах (а не сканированием всего). А уж выцепив таким образом диапазон указателей, вернет требуемые записи. Ежели канешна индексы в Постгре не для красоты, а для того же что и в других серверах. :0) Но это уже к реализации. А не к идеалогии.
Antava
Дата: 29.12.2003 15:27:24
Спасибо всем за помощь !!!

С постгрес работаю недавно (это вообще первая база)
Если можно обьясните по подробней


Если проиндексировать все записи (все записи как я понимаю будут
вносится упорядочено от 1.11.2003 00:01 до 30.11.2003 23:59 ??? )
Каким образом я могу показать запросу что интервал закончился ???

Vel и assa

Если не затруднит объясните подробней свои варианты
заранее благодарен !!
BigHarry
Дата: 29.12.2003 19:42:55
Antava

Каким образом я могу показать запросу что интервал закончился ???


Наверно - так:
SELECT * FROM table WHERE datatimefield BETWEEN "2003-11-01 00:01:00" AND "2003-11-30 23:59:00"
Shweik
Дата: 11.01.2004 22:15:45
2All

Конечно я ошибся, забыв упомянуть про кластерные индексы ! 8-\
Мои извинения Antava и благодарности Vel и assa! 8)
На физический порядок расположения влияют SQL-команды сервера.
В Постгресе это CLUSTER и фича развивается не так давно. В 7.4 её дополнили:
Add ALTER TABLE ... CLUSTER ON (Alvaro Herrera)
This command is used by pg_dump to record the cluster column for each table previously clustered. This information is used by database-wide cluster to cluster all previously clustered tables.
Насколько положительно эта комманда повлияет на производительность - время покажет. Какие приколы и обломы нас тут ждут - неизвестно.
Поэтому я пока в рабочих базах этой коммандой не пользовался. Надо попробовать. Про другие сервера ничего говорить не буду.


Но мне кажется что это все не совсем по теме. - я снова процитирую вопрос:


Если проиндексировать все записи (все записи как я понимаю будут
вносится упорядочено от 1.11.2003 00:01 до 30.11.2003 23:59 ??? )

Наверное нет! Читаем
http://www.postgresql.org/docs/current/interactive/sql-cluster.html
Clustering is a one-time operation: when the table is subsequently updated, the changes are not clustered. That is, no attempt is made to store new or updated rows according to their index order. If one wishes, one can periodically recluster by issuing the command again.
Т.е. тут все соответствует второму закону термодинамики - количество бардака во вселенной все возрастает. И пофиг - проинсертил ты пару записей или отредактил - запусти CLUSTER, если хочешь упорядочить их физическое расположение .
А вот это меня вообще расстроило :
When a table is being clustered, an ACCESS EXCLUSIVE lock is acquired on it. This prevents any other database operations (both reads and writes) from operating on the table until the CLUSTER is finished.
впрочем ничего другого и не следовало ожидать*(

Непохоже что есть другие варианты. И конечно же " There is no CLUSTER statement in the SQL standard. "
assa
Дата: 12.01.2004 15:09:34
пасип, канешна. Аднака я мыслил, штааа...

В опшем, мое понимание индексов таково: - это (в 0-ом приближении) аналог таблички ([значение], [указатель на физ запись]), но именно физически _выстроенный_* в порядке возрастания "значение" (т.е. аналог таблички с определенным кластерным индексом). (могут быть применены и более хитрые способы организации индексной структуры, но суть - обеспечить работу методов быстрого поиска). И вот по индексу идет быстрый поиск (а не скан) (например, - наиболее просто - делением интервала индексной структуры пополам (или еще как - при множественности условий)), а уж когда он возвратит отобранный набор, производится выборочное чтение из самой таблички только по возвращенным указателям. В этом смысле мое утверждение об упорядоченности индекса не имеет отношения к кластеру в смысле кластеризации таблицы.


(поскольку индексная струтура должна быть упорядочена, то и накладные расходы на ее поддержание существенней, чем на простую запись в табличку. - аналогично накладным расходам на кластеризацию таблицы по индексу).
__
* см. напр.:Поскольку значения в индесе хранятся в определенном порядке и нужно просматривать значительно меньший объем данных, использование индекса для поиска нужной информации гораздо быстрее, чем просмотр требуемых таблиц базы данных.