當使用union來查詢,並分頁時
如果數據量很大,很容易造成查詢超時,要么就是特別慢
首先我們先分析下數據,是否完全不重復
如果不重復,則使用 union all
union all和union的區別是,UNION 操作會對結果去重且排序,所以從速度來說, UNION ALL會更勝一籌
接着,所有的條件查詢,從子查詢入手
例如
select * from ( select id from A union all select id from B ) t where t.id>1 limit 10
這時,會從A表查詢所有的數據,拼接,查詢B表的所有數據,再執行where條件,在分頁,查詢速度可想而知
優化,從子查詢過濾條件
select * from ( select id from A where id>1 union all select id from B where id>1 ) t limit 10
一定要先篩選再合並數據,這樣可以有效的減少數據量,提高查詢速度
