Могу ли я создавать логические файлы в AS400 с помощью sql?

Мне нужно создать as400 "логических файлов".

мое приложение подключается к базе данных с помощью jdbc.

Можно ли создавать «логические файлы» с операторами sql?

Если да, то буду признателен за образец заявления.

Благодарность


person Aba Dov    schedule 30.01.2011    source источник
comment
Вы пытаетесь создать логический файл с выбором/пропуском или вы пытаетесь создать новый индекс для более быстрых запросов?   -  person Tracy Probst    schedule 31.01.2011
comment
@Tracy Probst Привет. Моя первоначальная цель состояла в том, чтобы создать материализованный запрос, содержащий выбор из нескольких таблиц для повышения производительности (у меня были проблемы с этим: stackoverflow.com/questions/4843521/). в качестве альтернативы я пытаюсь создать логический файл, который, насколько я понимаю, эквивалентен материализованному запросу, только он заменяет фактические данные указателями на исходные таблицы (я предполагаю, что он индексирует эти таблицы, чтобы соответствовать запросу). моя главная забота - производительность.   -  person Aba Dov    schedule 31.01.2011
comment
Я думаю, что вы можете немного застрять в номенклатуре здесь. Операционная система as400, которая теперь называется IBM i, описывает файлы одним из двух основных способов. Либо физический, либо логический файл. Таблица SQL похожа на физическую. Индексы и представления похожи на логические. Ссылка: wiki.midrange.com/index.php/SQL   -  person Lynette Duffy    schedule 03.02.2011
comment
@Линетт Даффи Спасибо за ссылку. Это полезно   -  person Aba Dov    schedule 03.02.2011


Ответы (3)


Я предлагаю использовать команду CREATE INDEX SQL из команды STRSQL с зеленым экраном. Тогда вы можете подсказать это. Вот пример CREATE INDEX, который позволил мне гораздо быстрее запрашивать файл размером 16 гигабайт. В этом примере физический файл был результатом работы монитора базы данных в течение недели:

CREATE INDEX QGPL.QZG0000016_QUERYJOB ON QGPL.QZG0000016
(QQJNUM ASC, QQUSER ASC, QQJOB ASC, QQUCNT ASC, QQRID ASC, QQI5 ASC)

Сам индекс создавался долго, но последующие запросы на основе индекса выполнялись очень быстро.

Если вам нужно присоединиться к нескольким столам, планируйте заранее. Знайте поля, которые вы будете использовать для объединения таблиц, и создайте индексы для объединенных таблиц. Вы получите желаемое увеличение производительности. Например, давайте составим запрос, чтобы показать товары, заказанные покупателем:

SELECT ORDETAIL.ITEM_NAME, ORDETAIL.QUANTITY, ORHEADER.SHIPDATE
FROM ORHEADER
INNER JOIN ORDETAIL ON ORDETAIL.ORDERID = ORHEADER.ORDERID
WHERE ORHEADER.CUST_NUM = 123456

Вы бы сделали следующие индексы, если бы они еще не существовали:

CREATE INDEX DATALIB.ORHEADER_BY_CUSTOMER ON DATALIB.ORHEADER (CUST_NUM ASC, ORDERID)
CREATE INDEX DATALIB.ORDETAIL_BY_ORDER ON DATALIB.ORDETAIL (ORDERID)

Если вам нужно создать логические критерии выбора/исключения файла, вам необходимо создать представление. Тем не менее, представление не является индексом, и вы не можете смешивать индекс и представление, как вы можете с ключевой логикой с выбором/пропуском. Для этого спецификация DDS по-прежнему является лучшей.

person Tracy Probst    schedule 31.01.2011
comment
Спасибо, Трейси. Ваш ответ ценен. Однако я ищу решение, которое не использует зеленые экраны. - person Aba Dov; 02.02.2011
comment
Аба, зеленый экран не нужен для команды CREATE INDEX SQL. Это просто полезно, потому что вы можете подсказать. Описанные выше команды прекрасно работают через ODBC. - person Tracy Probst; 02.02.2011
comment
+1 Хорошие примеры создания индексов (логических файлов) для повышения производительности - person Lynette Duffy; 03.02.2011
comment
Я бы также добавил ORDERID в конец списка ваших клиентов; (CUST_NUM ASC, ORDERID). Затем оптимизатор сначала будет использовать этот индекс, подберет указатели на идентификатор и перейдет ко второму индексу. Быстро быстро. Это как соединить точки :) - person Lynette Duffy; 03.02.2011

Это поможет, если вы пытаетесь упорядочить по своему представлению, но на самом деле не поможет, если у вас есть проблемы с производительностью.

Пример данных basetable:

A 
B 
C 
A 
A 
A 

Запрос:

create view myview1  as                   
select lib                                
from(                                     
  SELECT rank() over(order by lib), lib   
FROM basetable) a   

Пример данных из myview1

A 
A 
A 
A 
B 
C 
person JMilnes    schedule 28.02.2012

Чтобы достичь того же эффекта, я создал представления базы данных для всех таблиц в AS/400 DB2, сопоставив более понятные имена с физическими. Я не думаю, что представления являются логическими файлами, но я всего лишь пользователь упомянутой AS/400 и знаю о ней ровно столько, сколько необходимо для взаимодействия с данными.

person Confusion    schedule 30.01.2011
comment
Проблема с представлениями заключается в том, что когда вам нужно получить данные из них, выполняется их запрос на сборку. Логические файлы аналогичны материализованным представлениям, обновляются автоматически, но вместо сохранения данных имеют указатели или индексы строк таблицы, на которых они основаны. поэтому извлечение данных из них происходит быстрее - person Aba Dov; 30.01.2011
comment
@Aba Dov: Это правда, что открытие представления может занять больше времени, чем открытие собственного LF (около 0,003 секунды на моей маленькой модели 515). Но также верно и то, что чем больше последовательных операций ввода-вывода выполняется над двумя, тем разница в скорости представления догонит и передаст LF. Кроссовер может быть после чтения, может быть, 75 тысяч строк или около того. Таким образом, количество обрабатываемых строк может быть фактором, особенно если таблицы становятся большими. Для самых больших таблиц представление может легко превзойти LF. - person user2338816; 03.04.2014