SQL Index на нескольких таблицах, можно ли это сделать?

Некоторое время искали решение,

перейдите к (1) или (2), чтобы пропустить описание, сначала я объясню ситуацию.

Моя фирма обновила нашу эру. система, моя основная работа заключается в создании списков, используемых другими в фирме, я беру все свои данные из этой базы данных системы во время обновления, мы получили некоторые данные, преобразованные в соответствии с новой версией, некоторые из них остались позади, некоторые из них не были подделывается и просто напрямую экспортируется в новую базу данных, ее на отдельный сервер, в основном его успех, новый ERP. система работает так, как предполагалось, однако многие мои списки были разбиты, данные, используемые моими списками, отсутствуют / partial_missing / all_there

хорошо, поэтому проблема в том, что мне не нужны данные, которые мне нужны из старой базы данных, хорошо, что объединение в новой и старой базе данных должно быть в состоянии сделать это, однако я не хочу дублировать записи », данные, которые были преобразованы в новую базу данных, также существуют в старой базы данных ", поэтому два поля могут существовать" они делают, я попробовал это "

поэтому 2. версия моего решения

Мне не хватает первичных ключей «база данных iseries», поэтому я пошел на объединение комбинации feilds, создающих ключ uniqe, «слишком долго, чтобы объяснить, как я это сделал», однако это заканчивается тем, что я делаю вид с объединением на двух базах данных, делая конечно, никаких записей не существует два раза,

(1), так что это то, что я получил сейчас, представление о комбинации старых и новых табличных данных, все из которых построены с проверками на ключ «uniqe» …. каждый раз, когда мне нужны данные, которые были сделаны для обновления, я должен запускать дорогостоящий запрос в каждой таблице, «некоторые используют эти представления более 40 раз» (Question1), как я могу «экономически выгодно» брать данные из двух разных схем / баз данных и связывать друг с другом?

(2) единственное, что я могу придумать, чтобы дать мне эту производительность, – это сделать индексы вместо этих представлений, которые я построил, однако до сих пор я не смог найти какую-либо информацию о том, как это сделать (Question2). Могу ли я создать индекс над двумя таблицами,

моя база данных равна / 400 – iseries, но я заинтересован в решении по сравнению с любым типом базы данных, я очень гибкий с ресурсами

: EDIT: код, который используется для создания представления с небольшими изменениями,

SELECT CTCONO, CTDIVI, CTSTCO, CTSTKY, CTLNCD, CTTX40, CTTX15, CTPARM, CTTXID, CTRGDT, CTRGTM, CTLMDT, CTCHNO, CTCHID FROM NEWDB.CSYTAB UNION SELECT * FROM OLDDB.CSYTAB WHERE ( CTCONO,CTDIVI,CTSTCO,CTSTKY,CTLNCD ) NOT IN ( SELECT A.CTCONO,A.CTDIVI,A.CTSTCO,A.CTSTKY,A.CTLNCD FROM NEWDB.CSYTAB A, OLDDB.CSYTAB B WHERE A.CTCONO = B.CTCONO AND A.CTDIVI = B.CTDIVI AND A.CTSTCO = B.CTSTCO AND A.CTSTKY = B.CTSTKY AND A.CTLNCD = B.CTLNCD ) 

Создайте новую таблицу, в которой хранится ценность вашего дорогого запроса, а затем, если вы всегда будете игнорировать старые данные, если в нем есть запись в новой базе данных. Затем просто добавьте некоторые триггеры, чтобы обновить эту новую таблицу, когда обновляются другие таблицы.

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

Изменить: теперь вы разместили свою таблицу. Я вижу одну вещь, которую вы могли бы улучшить, сделайте вторую часть своего запроса:

 ... UNION SELECT * FROM OLDDB.CSYTAB B WHERE NOT EXISTS( SELECT TOP 1 1 FROM NEWDB.CSYTAB A WHERE A.CTCONO = B.CTCONO AND A.CTDIVI = B.CTDIVI AND A.CTSTCO = B.CTSTCO AND A.CTSTKY = B.CTSTKY AND A.CTLNCD = B.CTLNCD ) 

Затем при условии, что у вас есть единственный индекс, который охватывает {CTCONO, CTDIVI, CTSTCO, CTSTKY, CTLNCD} в NEWDB.CSYTAB, тогда он должен быть намного лучше, чем то, что вы получаете в настоящее время.

Ответ – нет.

Я не могу создать индекс для нескольких таблиц.

Мое решение состояло в том, чтобы создать таблицу, а в моем случае и представление, или я мог бы просто оптимизировать код SQL.

РЕДАКТИРОВАТЬ

Я только что узнал, что в MS (по крайней мере, в версии 2012 года) вы можете создавать индексированные представления. Поэтому в моем случае я бы превратил свои взгляды в индексированные представления и получил огромное повышение производительности.