SQL几个数据表都有100万左右数据,几个表关联查询统计总数怎么提高查询性能?
oracle数据库SQL:SELECTcount(id)FROMTBL_POS_SHOPs,TBL_POS_POSp,TBL_POS_CUSTOMERc,TBL_POS_...
oracle数据库SQL:
SELECT count(id)
FROM TBL_POS_SHOP s,
TBL_POS_POS p,
TBL_POS_CUSTOMER c,
TBL_POS_ORDER o,
TBL_POS_CARDINFO cd
WHERE o.POS_CATI = p.POS_CATI
and o.CUSTOMER_ID = c.ID
and o.SHOP_ID = s.ID
and o.CARDINFO_ID = cd.ID
已经添加有相关索引。
我本来是想用于分页时统计总数的,可是一执行就不动了,求高手指点,类似这种情况怎么解决? 展开
SELECT count(id)
FROM TBL_POS_SHOP s,
TBL_POS_POS p,
TBL_POS_CUSTOMER c,
TBL_POS_ORDER o,
TBL_POS_CARDINFO cd
WHERE o.POS_CATI = p.POS_CATI
and o.CUSTOMER_ID = c.ID
and o.SHOP_ID = s.ID
and o.CARDINFO_ID = cd.ID
已经添加有相关索引。
我本来是想用于分页时统计总数的,可是一执行就不动了,求高手指点,类似这种情况怎么解决? 展开
2个回答
展开全部
SELECT count(id)
FROM TBL_POS_SHOP s,
TBL_POS_POS p,
TBL_POS_CUSTOMER c,
TBL_POS_ORDER o,
TBL_POS_CARDINFO cd
WHERE o.POS_CATI = p.POS_CATI
and o.CUSTOMER_ID = c.ID
and o.SHOP_ID = s.ID
and o.CARDINFO_ID = cd.ID
首先,我觉得你找出各个表的关系,主从关系,主表放左边,依赖的表放右边,都用左连接,而不用现在这种内连接,
其次你的指定的count(id)请带上表的别名,你取得是哪个表的ID,否则系统区分不了,就会产生长时间等待。
FROM TBL_POS_SHOP s,
TBL_POS_POS p,
TBL_POS_CUSTOMER c,
TBL_POS_ORDER o,
TBL_POS_CARDINFO cd
WHERE o.POS_CATI = p.POS_CATI
and o.CUSTOMER_ID = c.ID
and o.SHOP_ID = s.ID
and o.CARDINFO_ID = cd.ID
首先,我觉得你找出各个表的关系,主从关系,主表放左边,依赖的表放右边,都用左连接,而不用现在这种内连接,
其次你的指定的count(id)请带上表的别名,你取得是哪个表的ID,否则系统区分不了,就会产生长时间等待。
追问
有道理,但这还不足以解决根本性问题,性能还是如此的差,还有没有更有效办法?
追答
主键和外键都确认加了索引! 加了索引应该会快很多了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询