Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Индексирование полей массива.
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Возник конкретный вопрос.... На который я не могу ответить =( Суть дела в том что у меня есть таблица message (id integer, id_board integer, name text, value text[]) Первые 3 поля понятно для чего.... А вот value.... Это массив значений. Он имеет фиксированное колличество элементов для конкретного значения id_board. Возможно ли сделать индексированние по каждому эллементу массива? Помогите плз.... А при колличестве записей > 600000 база просто ложится спать если учесть что выборка ведётся практически по всем полям.... И второй вопрос. (оптимизация запросов....) Код: plaintext 1. 2. 3. 4. Вот этот код сначала вычасляет размерность массива а потом с помощью ф-ии brows($col[1], 'value') подставляет в запрос поля вида "value[N] as valueN". Т.е. перечисляет все елементы массива в запросе. Сопственно вопрос: Как это переписать одним запросом с использованием хранимой процедуры? Плиз хелп. Я с постгресом знаком всего 2 дня. А проект уже написал. Теперь надо оптимизировать. Спасибо заранее всем кто откликнится..... ЗЫ PostgreSQL 8.0.3 ЗЫ2 Сорри за 2 вопроса в одном топике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 21:56 |
|
||
|
Индексирование полей массива.
|
|||
|---|---|---|---|
|
#18+
Есть конечно вариант.... value text[] заменить на intarray и использовать индексы вместо полного текста. Но тогда запросы будут гораздо длиннее и не уверен что скорость будет на много выше =\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2005, 22:08 |
|
||
|
Индексирование полей массива.
|
|||
|---|---|---|---|
|
#18+
Gustavo Hamogrizerov Суть дела в том что у меня есть таблица message (id integer, id_board integer, name text, value text[]) Первые 3 поля понятно для чего.... (прим. XM: нифига не понятно для чего, одни догадки) А вот value.... Это массив значений. Он имеет фиксированное колличество элементов для конкретного значения id_board. Впечатления: 1. вы пытаетесь сделать то ли форум, то ли блог или что-то в этом духе (что само по себе излише в виду наличия туевой хучи уже готовых отлажованых) 2. в таблицу message, похоже пытаетесь втюхать все реплики, что не есть правильно. Стандартные подходы (грубо) : - одна таблица Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Gustavo Hamogrizerov Возможно ли сделать индексированние по каждому эллементу массива? Помогите плз.... А при колличестве записей > 600000 база просто ложится спать если учесть что выборка ведётся практически по всем полям.... Нах..., в смысле, ЗАЧЕМ нужны такие запросы? Совет - пока база спит на запросах, почитайте книжек (но только не по проектированию СУБД, боже упаси!) Gustavo Hamogrizerov И второй вопрос. (оптимизация запросов....) А можно на чуть более логическом уровне объяснить ЗАЧЕМ он это делает, ЦЕЛЬ с т.з. пользователя ? Gustavo Hamogrizerov Плиз хелп. Я с постгресом знаком всего 2 дня. А проект уже написал. Теперь надо оптимизировать. Слов нет. Вы - монстр. Просто монстр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2005, 13:39 |
|
||
|
Индексирование полей массива.
|
|||
|---|---|---|---|
|
#18+
CREATE TABLE boards ( id bigserial NOT NULL, id_board bigint, id_params bigint, name character varying(255), "type" character varying(255) ); CREATE TABLE message ( id bigserial NOT NULL, id_board bigint, value text[] ); CREATE TABLE param ( id bigserial NOT NULL, id_params bigint, id_param bigint, id_value integer, name character varying(255), value text[], metrik text[], "type" text[] ); CREATE TABLE params ( id bigserial NOT NULL, name character varying(255) ); INSERT INTO boards (id, id_board, id_params, name, "type") VALUES (1, 0, 0, 'Автомобили', 'list'); INSERT INTO boards (id, id_board, id_params, name, "type") VALUES (2, 1, 1, 'BMW', 'board'); INSERT INTO message (id, id_board, value) VALUES (1, 2, '{1995,Зелёный,"Титановые диски",Да,"453453 EU",543534534,"04-08-2005 19:31:16"}'); INSERT INTO message (id, id_board, value) VALUES (2, 2, '{1997,Синий,"Кожанный салон",Нет,"43534644 MLD",4264254,"04-08-2005 19:38:22"}'); INSERT INTO message (id, id_board, value) VALUES (3, 2, '{1999,Красный,"Руль для распальцовки",Да,"555 US",6546756,"04-08-2005 19:39:20"}'); ......... INSERT INTO param (id, id_params, id_param, id_value, name, value, metrik, "type") VALUES (1, 1, 0, 0, 'Год', '{1995,1996,1997,1998,1999,2000}', NULL, '{combobox,true,true,false,true}'); INSERT INTO param (id, id_params, id_param, id_value, name, value, metrik, "type") VALUES (6, 1, 0, 0, 'Телефон', NULL, NULL, '{inputbox,false,false,false,true}'); INSERT INTO param (id, id_params, id_param, id_value, name, value, metrik, "type") VALUES (4, 1, 0, 0, 'Обмен', '{Да,Нет}', NULL, '{radiobox,true,true,false,true}'); INSERT INTO param (id, id_params, id_param, id_value, name, value, metrik, "type") VALUES (2, 1, 0, 0, 'Цвет', '{Красный,Зелёный,Синий}', NULL, '{combobox,true,true,false,false}'); INSERT INTO param (id, id_params, id_param, id_value, name, value, metrik, "type") VALUES (5, 1, 0, 0, 'Цена', NULL, '{US,EU,MLD}', '{inputbox,true,false,true,true}'); INSERT INTO param (id, id_params, id_param, id_value, name, value, metrik, "type") VALUES (3, 1, 0, 0, 'Фишки', '{"Фишка 1","Фишка 2","Фишка 3"}', NULL, '{checkbox,false,false,false,false}'); INSERT INTO param (id, id_params, id_param, id_value, name, value, metrik, "type") VALUES (7, 1, 0, 0, 'Время', NULL, NULL, '{time,true,false,false,false}'); INSERT INTO params (id, name) VALUES (1, 'Автомобили'); XM Впечатления: 1. вы пытаетесь сделать то ли форум, то ли блог или что-то в этом духе (что само по себе излише в виду наличия туевой хучи уже готовых отлажованых) У вас не верное впечатление. Я пытаюсь создать доску объявлений. XM 2. в таблицу message, похоже пытаетесь втюхать все реплики, что не есть правильно. В эту таблицу я буду пихать все объявления. XM Нах..., в смысле, ЗАЧЕМ нужны такие запросы? Совет - пока база спит на запросах, почитайте книжек (но только не по проектированию СУБД, боже упаси!) Необходимость возникла и пришлось писать без книжек. Такие запросы нужны по тому что выборка ведётся по всем полям. У меня было оперативы 256 любой запрос вешался. Поставил ещё 256 и выборка стала занимать доли секунды. Вот только при сортировке order by value[N] desc|asc он опять таки задумывается на долго. По поводу манов это будет обязательно. Но как по другому организовать рассширяемую базу данных где будет более 100 досок объявлений и у каждой будет своё колличество полей разных типов! XM А можно на чуть более логическом уровне объяснить ЗАЧЕМ он это делает, ЦЕЛЬ с т.з. пользователя ? Можно. Я просто сначала узнаю какое колличество полей в массиве а потом выбираю из этих полей значения. Всё это можно сделать одним запросом. точнее одной хранимой процедурой. XM Слов нет. Вы - монстр. Просто монстр. А можно без иронии? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2005, 16:29 |
|
||
|
Индексирование полей массива.
|
|||
|---|---|---|---|
|
#18+
Ну вот, на конкретных данных лучше видны корни проблем. Gustavo Hamogrizerov wrote: > INSERT INTO message (id, id_board, value) VALUES (1, 2, > '{1995,Зелёный,"Титановые диски",Да,"453453 EU",543534534,"04-08-2005 > 19:31:16"}'); > INSERT INTO message (id, id_board, value) VALUES (2, 2, > '{1997,Синий,"Кожанный салон",Нет,"43534644 MLD",4264254,"04-08-2005 > 19:38:22"}'); > INSERT INTO message (id, id_board, value) VALUES (3, 2, > '{1999,Красный,"Руль для распальцовки",Да,"555 US",6546756,"04-08-2005 > 19:39:20"}'); ....... > Я пытаюсь создать доску объявлений. > В эту таблицу я буду пихать все объявления. Естественно будет тормозить ужасно, т.к. говно структура, я таких и не видал еще, налицо нарушение 1НФ. (хотя может я отстал от жизни и это какое-то новое течение?) Лучший способ оптимизации в этом случае - вдумчиво перепроектировать всю схему. > Но как по другому организовать рассширяемую базу данных где будет более > 100 досок объявлений и у каждой будет своё колличество полей разных типов! > На форуме "Проектирование БД" такие темы постоянно всплывают, не изобретайте велосипед, а посмотрите как это делают другие и какие грабли вас ожидают. > А можно без иронии? В данном случае нельзя Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2005, 13:47 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33205044&tid=2007081]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
138ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 269ms |
| total: | 506ms |

| 0 / 0 |
