Try this but I might be incorrect. It looks like you have a custom component which you have highlighted. When you compile the component class it produces a .js file in InstallDirectory\CSP\broker. Look there to see if the file is there. If not consider recompiling your component class and ensure that the .js class exists.
Regarding
If the first bullet item in the Query Plan is “Read master map”, or the Query Plan calls a module whose first bullet item is “Read master map”, the query first map is the master map rather than an index map. Because the master map reads the data itself, rather than an index to the data, this almost always indicates an inefficient Query Plan. Unless the table is relatively small, we should create an index so that when we rerun this query the Query Plan first map says “Read index map.”
I think it's more subtle than that. My general plan of attack is to review the results of Show Plan and then search for Looping. If the first bullet item in Show Plan is one of the following
- Read master map Ens.MessageHeader.IDKEY, using the given idkey value.
- Read master map Ens.MessageHeader.IDKEY, looping on ID (with a range condition).
I'm not immediately concerned. In the first case this is going directly to the row which is perfectly fine.
In the second case so long as the range condition is not going to read the entire extent I can accept that and not look for a better query plan.
Honestly, where its
Read master map Ens.MessageHeader.IDKEY, looping on ID (with a range condition).
or
Read index map Ens.MessageHeader.TimeCreated, looping on TimeCreated (with a range condition) and ID.
I don't care if its the master map or the index map, what I'm interested in is Looping and does looping cause the engine to look at the entire extent or index.
Still not fully able to grasp what you are doing but if are trying to address
log.cls_id IN (61) AND log.q_id IN (19, 25, 27)
I often find myself doing something like
log.cls_id %INLIST $LISTFROMSTRING(':Param1,',')
AND log.q_id %INLIST $LISTFROMSTRING(':Param2,',')
and then set Param1=61 and Param2 = "19, 25, 27"
so long as you know the values of Param1 and Param2.
%INLIST is documented https://docs.intersystems.com/iris20241/csp/docbook/Doc.View.cls?KEY=RSQ...
and
$LISTFROMSTRING is documented here https://docs.intersystems.com/iris20241/csp/docbook/Doc.View.cls?KEY=RSQ...