2012-06-22 2 views
1

Я пытаюсь выполнить выбор на очень большой таблице без каких-либо применимых индексов в Informix. К сожалению, невозможно добавить применимый индекс к моменту завершения этого проекта. Существуют строгие процедуры для изменения базы данных, и для получения требуемого знака в моей организации потребуется слишком много времени.Informix - Выберите из раздела

Таблица фрагментирована, и я ранее выбирал из определенных разделов в базах данных Oracle. Есть ли способ указать фрагмент в запросе SELECT?

+0

Можете ли вы предсказать, сколько результатов ваш запрос будет возвращать? .. Если это одноранговой запрос одноразовую, вы можете клонировать таблицу и добавить индексы для поддержки запросов ? –

ответ

1

только косвенно ...

Если ваши критерии поиска идентификации строк, которые будут выбраны частично на основе выражения (ов), используемого в разбиении, то Informix будет выполнять «устранение фрагмента», чтобы избежать разделов сканирования (фрагменты), которые не могут повлиять на ответ. Если у вас есть циклическое разбиение на разделы, то исключение фрагмента невозможно. Если у вас есть экспрессия или фрагментация фрагмента, то вы можете извлечь выгоду из устранения фрагмента. (Поскольку устранение фрагментов является большой победой в производительности, это делается по возможности.)

В конечном счете, если вы не можете поместить надлежащие индексы на место, производительность запроса, вероятно, будет медленной, поскольку это может потребоваться сканирование таблиц, и они могут быть медленнее, чем индексированные операции доступа. Тем не менее, иногда сканирование таблицы является самым быстрым способом обработки запроса. Это не так часто бывает.

+0

Спасибо, Джонатан. Я предполагаю, что таблица использует циклическое разбиение на разделы, поскольку фрагменты нумеруются (т. Е. Tablename01, tablename02 и т. Д.). Вы знаете, как я буду проверять? –

+0

Информация находится в системном каталоге, но мне нужно посмотреть, где. Вероятно, что-то вроде «sysfragments». –

+0

Я подтвердил, что он записан в столбце sysfragments.strategy. Оказывается, эта таблица круглая, разделенная на разделы. Документация для этой таблицы находится по адресу http://publib.boulder.ibm.com/infocenter/idshelp/v117/index.jsp?topic=%2Fcom.ibm.sqlr.doc%2Fids_sqr_040.htm –

0

Как определить, использует ли таблица круговую фрагментацию? Есть два способа:

Один простой способ, чтобы получить схему таблицы/индекса, используя dbschema

UNIXprompt> dbschema -d <db name> -ss -t <table name> 

если вы видите слова «круговике» в создании таблицы DDL, то вы будете знать.

Другой запрос к SMI:

database <db name>; 
select unique(strategy) from sysfragments 
where fragtype = 'T' 
    and tabid = (select tabid from systables where tabname = '<table name>'; 

Здесь ключевое значение для столбца стратегии:
R = Круговой фрагментации стратегия
Е = Выражение на основе стратегии фрагментации
Я = IN DBSPACE указывает конкретное местоположение как часть стратегии фрагментации
T = стратегия фрагментации на основе таблиц
H = Таблица представляет собой подтаблицу с иерархией таблиц (IDS) или фрагментами на основе хэша (XPS).

И последнее, но не в последнюю очередь, я работаю с XLDBs (самая большая таблица до сих пор 1.5K широкие, 600+ колонны, 60 млрд РИК, да, миллиардов), и индексация делает ОГРОМНЫЙ разницу, как в секундах против часов (предоставлено, у меня было ≈100 vCPU, выделенных для моего сервера базы данных), поэтому я предлагаю вам сделать петицию в вашем совете по управлению изменениями и создать свой индекс, когда вы получите разрешение на это, просто убедитесь, что вы используете «онлайн» ", определите свой правильный fillfactor и не забудьте обновить статистику (используйте дост Art).

Мои 2 цента ...

Смежные вопросы