Hi, My cache has 1 million rows and the sql is as follows. This sql is taking around 1.836 seconds to execute and this time increases as I go on adding the data to this cache. Some time it takes more than 4 seconds.
Is there any way to improve the execution time? *SQL:* SELECT id, moduleId,ipEnd, ipStart FROM IpContainerIpV4Data USE INDEX(ip_container_ipv4_idx1) WHERE subscriptionId = ? AND moduleId = ? AND (ipStart <= ? AND ipEnd >= ?) UNION ALL SELECT id, moduleId,ipEnd, ipStart FROM IpContainerIpV4Data USE INDEX(ip_container_ipv4_idx1) WHERE subscriptionId = ? AND moduleId = ? AND (ipStart <= ? AND ipEnd >= ?) UNION ALL SELECT id, moduleId,ipEnd, ipStart FROM IpContainerIpV4Data USE INDEX(ip_container_ipv4_idx1) WHERE subscriptionId = ? AND moduleId = ? AND (ipStart >= ? AND ipEnd <= ?) *Indexes are as follows:* public class IpContainerIpV4Data implements Data<DefaultDataAffinityKey>, UpdatableData<DefaultDataAffinityKey> { @QuerySqlField private long id; @QuerySqlField(orderedGroups = {@QuerySqlField.Group(name = "ip_container_ipv4_idx1", order = 1)}) private int moduleId; @QuerySqlField(orderedGroups = {@QuerySqlField.Group(name = "ip_container_ipv4_idx1", order = 0), @QuerySqlField.Group(name = "ip_container_ipv4_idx2", order = 0)}) private long subscriptionId; @QuerySqlField(orderedGroups = {@QuerySqlField.Group(name = "ip_container_ipv4_idx1", order = 3, descending = true), @QuerySqlField.Group(name = "ip_container_ipv4_idx2", order = 2, descending = true)}) private long ipEnd; @QuerySqlField(orderedGroups = {@QuerySqlField.Group(name = "ip_container_ipv4_idx1", order = 2), @QuerySqlField.Group(name = "ip_container_ipv4_idx2", order = 1)}) private long ipStart; } *Execution Plan:* 2018-09-03 19:32:03,098 232176 [pub-#78%springDataNode%] INFO c.q.a.g.d.IpContainerIpV4DataGridDaoImpl - SELECT __Z0.ID AS __C0_0, __Z0.MODULEID AS __C0_1, __Z0.IPEND AS __C0_2, __Z0.IPSTART AS __C0_3 FROM IP_CONTAINER_IPV4_CACHE.IPCONTAINERIPV4DATA __Z0 USE INDEX (IP_CONTAINER_IPV4_IDX1) /* IP_CONTAINER_IPV4_CACHE.IP_CONTAINER_IPV4_IDX1: SUBSCRIPTIONID = ?1 AND MODULEID = ?2 AND IPSTART <= ?3 AND IPEND >= ?4 */ WHERE ((__Z0.SUBSCRIPTIONID = ?1) AND (__Z0.MODULEID = ?2)) AND ((__Z0.IPSTART <= ?3) AND (__Z0.IPEND >= ?4)) 2018-09-03 19:32:03,098 232176 [pub-#78%springDataNode%] INFO c.q.a.g.d.IpContainerIpV4DataGridDaoImpl - SELECT __Z1.ID AS __C1_0, __Z1.MODULEID AS __C1_1, __Z1.IPEND AS __C1_2, __Z1.IPSTART AS __C1_3 FROM IP_CONTAINER_IPV4_CACHE.IPCONTAINERIPV4DATA __Z1 USE INDEX (IP_CONTAINER_IPV4_IDX1) /* IP_CONTAINER_IPV4_CACHE.IP_CONTAINER_IPV4_IDX1: SUBSCRIPTIONID = ?5 AND MODULEID = ?6 AND IPSTART <= ?7 AND IPEND >= ?8 */ WHERE ((__Z1.SUBSCRIPTIONID = ?5) AND (__Z1.MODULEID = ?6)) AND ((__Z1.IPSTART <= ?7) AND (__Z1.IPEND >= ?8)) 2018-09-03 19:32:03,098 232176 [pub-#78%springDataNode%] INFO c.q.a.g.d.IpContainerIpV4DataGridDaoImpl - SELECT __Z2.ID AS __C2_0, __Z2.MODULEID AS __C2_1, __Z2.IPEND AS __C2_2, __Z2.IPSTART AS __C2_3 FROM IP_CONTAINER_IPV4_CACHE.IPCONTAINERIPV4DATA __Z2 USE INDEX (IP_CONTAINER_IPV4_IDX1) /* IP_CONTAINER_IPV4_CACHE.IP_CONTAINER_IPV4_IDX1: SUBSCRIPTIONID = ?9 AND MODULEID = ?10 AND IPSTART >= ?11 AND IPEND <= ?12 */ WHERE ((__Z2.SUBSCRIPTIONID = ?9) AND (__Z2.MODULEID = ?10)) AND ((__Z2.IPSTART >= ?11) AND (__Z2.IPEND <= ?12)) 2018-09-03 19:32:03,098 232176 [pub-#78%springDataNode%] INFO c.q.a.g.d.IpContainerIpV4DataGridDaoImpl - ((SELECT __C0_0 AS ID, __C0_1 AS MODULEID, __C0_2 AS IPEND, __C0_3 AS IPSTART FROM PUBLIC.__T0 /* IP_CONTAINER_IPV4_CACHE."merge_scan" */) UNION ALL (SELECT __C1_0 AS ID, __C1_1 AS MODULEID, __C1_2 AS IPEND, __C1_3 AS IPSTART FROM PUBLIC.__T1 /* IP_CONTAINER_IPV4_CACHE."merge_scan" */)) UNION ALL (SELECT __C2_0 AS ID, __C2_1 AS MODULEID, __C2_2 AS IPEND, __C2_3 AS IPSTART FROM PUBLIC.__T2 /* IP_CONTAINER_IPV4_CACHE."merge_scan" */)