I found several queries running on a MySQL 5.0 database like this one:
SELECT PATH, NAME FROM JBP_OBJECT_NODE WHERE PK IN ( SELECT NODE_KEY FROM JBP_OBJECT_NODE_SEC WHERE ROLE IN ( SELECT jr.jbp_name FROM jbp_users ju, jbp_role_membership jrm, jbp_roles jr WHERE jrm.jbp_uid = ju.jbp_uid AND jr.jbp_rid = jrm.jbp_rid AND ju.jbp_uname = 'LUDOVICO' AND ju.jbp_enabled = 1));
This query is related to JBoss Portal and does a full scan on table JBP_OBJECT_NODE.
It has bad performances (>0.8 sec) with just a few records:
mysql> select count(*) from JBP_OBJECT_NODE;
+———-+
| count(*) |
+———-+
| 33461 |
+———-+
If I rewrite the query using an inner join (à la Oracle, please forgive me) instead of a subquery I get an index scan:
SELECT DISTINCT a.PATH, a.NAME /* , b.NODE_KEY */ FROM JBP_OBJECT_NODE a, JBP_OBJECT_NODE_SEC b WHERE a.pk=b.NODE_KEY AND b.ROLE IN ( SELECT jr.jbp_name FROM jbp_users ju, jbp_role_membership jrm, jbp_roles jr WHERE jrm.jbp_uid = ju.jbp_uid AND jr.jbp_rid = jrm.jbp_rid AND ju.jbp_uname = 'UTDEMO' AND ju.jbp_enabled = 1);
With 30k records the execution time falls down from 0.8 secs to 0.01 secs…
That’s NOT all! I found this open bug:
https://jira.jboss.org/jira/browse/JBPORTAL-2040
With many users registered in, the JBoss Portal Admin console tooks over a minute to show a single page…
I don’t like portals…