High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
[Oracle] Вопрос про организацию индекса
24.12.2008 12:46
|
|
|
Вопрос: Есть таблица, с таким вот DDL code: CREATE TABLE ARCH_SIGNALS.TAG_000001 (
DATETIME TIMESTAMP(6),
VALUE NUMBER(14, 6),
QUALITY NUMBER(3))
TABLESPACE ARCH_SIGNALS;
CREATE INDEX ARCH_SIGNALS.IDX_TAG_000001 ON ARCH_SIGNALS.TAG_000001 (DATETIME)
TABLESPACE INDX
LOCAL;
таблица и индекс находятся в разных tablespace'ах и соотв. в разных датафайлах
при заполнении таблицы большим объемом данных датафайл индекса имеет бОльший размер чем датафайл таблицы (больше примерно на 30%)
Почему так получается? По идее размер индекса должен быть меньше чем таблица, т.к. в него включено только одно поле из таблицы...
|
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31411
|
|
Рейтинг: 8952
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
24.12.2008 12:51
|
|
|
primary key у таблицы какой?
ps так в индексе обычно хранится поле из индекса + primary key.
|
|
High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: DarkGray]
24.12.2008 13:20
|
|
|
В ответ на:
primary key у таблицы какой?
его там нету, в DDL прописана исчерпывающая информация о структуре таблицы
|
|
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
24.12.2008 13:38
|
|
|
|
High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: Yorik]
24.12.2008 13:40
|
|
|
а вот не нужен, может быть несколько записей с одинаковым полем DATETIME (по которому сделан индекс)
|
|
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: DarkGray]
24.12.2008 14:21
|
|
|
В ответ на:
так в индексе обычно хранится поле из индекса + primary key.
а разве не rowid?
|
Хватит дрочить на рейтинги |
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
24.12.2008 14:22
|
|
|
В ответ на:
По идее размер индекса должен быть меньше чем таблица, т.к. в него включено только одно поле из таблицы...
нууу если остальные поля маленькие и это одно поле хреново индексируется (например все значения разные и большие) то ...
|
Хватит дрочить на рейтинги |
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: botWi]
24.12.2008 14:23
|
|
|
а, да, поля будут вноситься в индекс только если попросить (явно указать или сделать кластеризованный индекс) а так - только rowid. но что-то мне подсказывает, что таки надо автору сделать primary key.
|
|
High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
24.12.2008 14:29
|
|
|
Добавлю: характер данных - записи с монотонным увеличением поля DATETIME (архивация показаний с прибора с частотой записи примерно раз в секунду).
Мне эта база досталась в наследство, возникли сомнения в оптимальности ее организации... На данный момент размер таблицы 80Гб, индекса 120Гб.
|
|
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
24.12.2008 14:34
|
|
|
если нужно только это, то зачем отделять индекс? сделай кластеризованный.
|
|
Zoobastik
|
Комок меха
|
|
|
|
Рег.: 18.10.2003
|
Сообщений: 7460
|
Из: За спиной
|
Рейтинг: 4347
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
24.12.2008 14:49
|
|
|
Добавлю свои 5 копеек: Присоединюсь к подозрению, что в индексе rowid хранится, что и увеличивает размер индекса. Так же стоит проверить селективность индекса - как много на одно DATETIME приходится значений в среднем.
Если хочется ускорить чтене данных, то можно почитать Кайта главы о таблицах и о индексах - возможно твою таблицу можно хранить как организованную по индексу (таблица = своему индексу). Правда Кайт только для 8-ой версии Оракла, так что еще лучше официальную документацию почитать. Самый простой способ - спросить на sql.ru в форуме. Те зубры точно объяснят откуда растут ноги у таблицы и руки у ее создателя.
Еще мысля - рассмотреть возможно партицировать таблицу по полю DATETIME.
|
|
High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: Yorik]
24.12.2008 16:22
|
|
|
индекс нужно отделять для ускорения записи на диск (датафайлы таблицы и индекса на разных дисках) таких таблиц несколько тысяч, в каждую из них раз в секунду пишутся данные, нагрузка довольно большая получается
|
|
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
24.12.2008 21:07
|
|
|
я так понимаю, введение кластеризованного индекса в данном случае неухудшит скорость записи на диск (все равно данные будут писаться все и изредка скидваться на диск перестроенные страницы индекса), но при этом ускорит скорость выборки по ключевому значению. Если добавить партиционирование по этому же ключу, все будет совсем в шоколаде.
|
|
High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: Yorik]
24.12.2008 21:15
|
|
|
Спасибо, попробуем
|
|
|
Fedos
|
|
|
|
|
Рег.: 19.11.2003
|
Сообщений: 5694
|
Из: помойки
|
Рейтинг: 1816
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
25.12.2008 02:16
|
|
|
В ответ на:
INDX
какое-то не очень информативное название таблспейса там точно ничего кроме этого индекса не лежит?
|
why so serious блядь? |
|
High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: Fedos]
25.12.2008 15:02
|
|
|
Да, специально созданный таблспейс для индексов лежит на отдельном диске
|
|
|
High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: Yorik]
25.12.2008 15:05
|
|
|
не совсем понял как к обычной таблице приделать кластеризованный индекс ты имеешь ввиду создать кластерную таблицу со своим индексом?
|
|
|
Yorik
|
|
|
|
|
Рег.: 01.09.2005
|
Сообщений: 2476
|
Из: Москва
|
Рейтинг: 633
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
25.12.2008 16:04
|
|
|
ээ... нинай, как это называется в Oracle. видимо, так.
|
|
High_egor
|
Carpal Tunnel
|
|
|
|
Рег.: 27.12.2003
|
Сообщений: 4119
|
|
Рейтинг: 1233
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: Fedos]
25.12.2008 22:57
|
|
|
Нет, таблспейс создавался вручную Oracle 10g
|
|
|
Fedos
|
|
|
|
|
Рег.: 19.11.2003
|
Сообщений: 5694
|
Из: помойки
|
Рейтинг: 1816
|
|
Re: [Oracle] Вопрос про организацию индекса
[re: High_egor]
25.12.2008 23:42
|
|
|
В ответ на:
Да, специально созданный таблспейс для индексов
я понял, что для индексов, как раз и имел ввиду, мб, там индексы на другие таблицы еще лежат? вообще, по-моему такой индекс должен меньше весить, чем сама таблица, даже если одинаковых значений DATETIME практически нет
попробуй посмотреть, сколько реально занимают экстенты под индекс и таблицу что-то типа: select sum(bytes) from dba_extents where owner = 'ARCH_SIGNALS' and segment_name = 'TAG_000001' select sum(bytes) from dba_extents where owner = 'ARCH_SIGNALS' and segment_name = 'IDX_TAG_000001' бежать может долговато, учитывая размеры датафайлов Мб датайфайл под таблицу "раздутый" просто.
И есчо: DDL, который ты привел - это тулза какая-то выдает или как? смущает опция LOCAL в скрипте для индекса. мне казалось, что локальные индексы можно только для партициированных таблиц создавать
|
why so serious блядь? |
|