20/30 tables and 300 columns is quite a heavy query / view.
VIEW is only a stored SELECT. The same considerations apply. 
#1)
you should have an index for each column that appears in a JOIN ON..   on WHERE...
and that's hopefully just 1 index by table
#2) for each table the required columns should go as Data into the index
You are perfect if the query analyzer only shows access to indices.

My proposal only covered views of a single table with indices

Materializing a multi-table view as you describe it would require a hidden table with all JOINs
and no filtering WHERE clause. And you would require extra code to keep it up to date.
This is a job that the query generator does in an excellent way and with all tricks available.

I wouldn't say it's impossible. And the final query is definitely faster. 
But it may take weeks or months to get it running. Not to talk about maintenance.
Analytics/DeepSee acts in a similar way. And I can prove: it wasn't done in an afternoon session.

 

Hi Nigel,

I experienced this missing UNINSTALL feature several times filling up my working environment.
So I adopted this  strategy:
- if there is no Docker container in the project I instal one of the prepared templates
- As packages are (or should) independent of the platform I enter the container and install it there
simply running docker-compose exec -u root iris bash and  execute the installation
and when finished just removing containers and images and I'm back to roots.
It only fails if I run against the 5 connections limit of the community license. But that's untypical.

no qspec required.

USER>set file="box.xml"
USER>set sc=$system.OBJ.Export("box.GBL",.file)
 
Exportieren in XML gestartet am 06/08/2021 11:46:58
Exportiere Global: ^box
Export erfolgreich abgeschlossen.
 
USER>$type box.XML
 
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25" zv="IRIS for Windows (x86-64) 2021.1 (Build 209U)" ts="2021-06-08 11:46:58">
<Global>
<Node><Sub>^box</Sub>
<Node><Sub>1</Sub>
<Node><Sub>1</Sub>
<Data> </Data>
<Node><Sub>0</Sub>
<DataBase64>G1syOzRI
</DataBase64>
</Node>
<Node><Sub>1</Sub>
<Data>1</Data>
</Node>
<Node><Sub>2</Sub>
<Data>...456..9</Data>
</Node>
</Node>
<Node><Sub>2</Sub>
<Data> </Data>
<Node><Sub>0</Sub>
<DataBase64>G1syOzEwSA==
</DataBase64>
- - - -   removed ------- 
</Node>
</Node>
<Data> </Data>
USER>