Why is suiteql so slow compared to a regular datab...
# suiteql
a
Why is suiteql so slow compared to a regular database? I mean I have queries that take 3 minutes to load. Such numbers is unheard of in other databases.
m
how are you running the query and how many results?
a
Sample query: Get a list with the columns: transaction item bom quantity work order quantity issue quantity 3368 rows in 109511ms.
Copy code
WITH relitems AS (
  SELECT
    transactionline.item,
    transactionline.createdfrom AS transaction
  FROM
    transaction
    INNER JOIN transactionline ON transaction.id = transactionline.transaction
    INNER JOIN transaction as wo on wo.id = transactionline.createdfrom
  WHERE
    transactionline.mainline = 'F'
    AND transaction.type = 'WOIssue' --   and  transactionline.createdfrom = 186728
    and wo.trandate between TO_DATE('05/01/2022') and TO_DATE('06/01/2022')
  UNION
  SELECT
    transactionline.item,
    transaction.id AS transaction
  FROM
    transaction
    INNER JOIN transactionline ON transactionline.transaction = transaction.id
  WHERE
    transactionline.mainline = 'F' -- AND transactionline.transaction = 186728
    AND transaction.type = 'WorkOrd'
    and transactionline.quantity < 0
    and transaction.trandate between TO_DATE('05/01/2022') and TO_DATE('06/01/2022')
  UNION
  SELECT
    component.item,
    transaction.id
  FROM
    transaction
    INNER JOIN bomrevision ON transaction.billofmaterialsrevision = bomrevision.id
    INNER JOIN bomrevisioncomponentmember AS component ON component.bomrevision = bomrevision.id --   WHERE
    where
     transaction.type = 'WorkOrd'
    and transaction.trandate between TO_DATE('06/01/2022') and TO_DATE('06/01/2022')
),
issuelines AS (
  SELECT
    transactionline.createdfrom AS workorder,
    transactionline.item,
    SUM(transactionline.quantity) * -1 AS quantity
  FROM
    transaction
    INNER JOIN transactionline ON transactionline.transaction = transaction.id
  WHERE
    transactionline.isinventoryaffecting = 'T'
    AND transaction.type = 'WOIssue'
  GROUP BY
    transactionline.item,
    transactionline.createdfrom
),
wolines AS (
  SELECT
    transactionline.item,
    transactionline.quantity * -1 AS quantity,
    transaction.id AS workorder
  FROM
    transaction
    INNER JOIN transactionline ON transactionline.transaction = transaction.id
  WHERE
    transactionline.mainline = 'F'
    AND transaction.type = 'WorkOrd'
),
bomlines AS (
SELECT
transaction.id as workorder,
  components.item,
  components.quantity * buom.conversionrate as bomquantity,
  (components.quantity * buom.conversionrate) * mainline.quantity as totalquantity
FROM
  transaction
  INNER JOIN transactionline as mainline ON mainline.transaction = transaction.id
  AND mainline.mainline = 'T'
  INNER JOIN bomrevision ON bomrevision.id = transaction.billofmaterialsrevision
  INNER JOIN bomrevisioncomponentmember AS components ON components.bomrevision = bomrevision.id
  INNER JOIN unitstypeuom as buom on buom.internalid = components.units
)
SELECT
  relitems.item,
  item.itemid,
  item.displayname,
  item.description,
  issuelines.quantity AS issuequantity,
  wolines.quantity AS woquantity,
  bomlines.totalquantity as quantityperbom
FROM
  relitems
  INNER JOIN item ON item.id = relitems.item
  LEFT JOIN issuelines ON issuelines.item = relitems.item
  AND issuelines.workorder = relitems.transaction
  LEFT JOIN wolines ON wolines.item = relitems.item
  AND wolines.workorder = relitems.transaction
  LEFT JOIN bomlines on bomlines.workorder = relitems.transaction and bomlines.item = relitems.item
  inner join transaction as wo on relitems.transaction = wo.id
d
Run each of those queries individually to see where the bottleneck is. We have had trouble with back end NS joins taking an age to return results ... NS answer was to reduce the query size.
netsuite 1
m
One of the major limitations is that users have no control over which fields are indexed. For example in Salesforce, you can ask support to set custom fields as indexable but I don't believe that's possible in the NetSuite world.
Also no option to show the query plan