(SELECT
ID
FROM
T_Student201701)
UNION
(SELECT
ID
FROM T_Student201707)
LIMIT 0,
10;
比如查詢2017年的學生記錄,共1月份和7月份兩張分表
需要分頁查詢并排序
這樣查詢效率極低,如果每個表單獨查詢秒查詢.
怎么解決呢?
查詢計劃如圖
1 PRIMARY T_StudentAttendanceDetails201701 index ModifyTime 6 943851 Using index
2 UNION T_StudentAttendanceDetails201707 index index_ModifyTime 6 1205527 Using index
UNION RESULT <union1,2> ALL Using temporary
uj5u.com熱心網友回復:
PRIMARY T_StudentAttendanceDetails201701 index ModifyTime 6 943851 Using indexUNION T_StudentAttendanceDetails201707 index index_ModifyTime 6 1205527 Using index
UNION RESULT <union1,2> ALL Using temporary
uj5u.com熱心網友回復:
頂起來....uj5u.com熱心網友回復:
union意味著去重,如果兩個表的資料不重復,用 union alluj5u.com熱心網友回復:
也可以事先把結果union到一張表里 然后直接對外提供結果uj5u.com熱心網友回復:
用的就是union all代碼寫錯了,
效率低的很
uj5u.com熱心網友回復:
看下表結構,執行計劃都擠到一塊了,沒舉動看uj5u.com熱心網友回復:
忘記了一件事,select id from a union all select id from b , 在 MySQL 中是個坑你這個查詢應該把 limit 帶到子查詢中才行,否則它先先算出 子查詢,再對子查詢的結果分頁
(SELECT
ID
FROM
T_Student201701 LIMIT 0, 10)
UNION
(SELECT
ID
FROM T_Student201707 LIMIT 0, 10)
LIMIT 0, 10;
uj5u.com熱心網友回復:
[code=csharp][code=java][code=php][code=Json][/code][/code][/code][/code]
uj5u.com熱心網友回復:
如果兩個表的id沒有相同的,可以把union改成union all。如果兩個表的id有相同的,建議新建一個表,存盤去重后的結果。
uj5u.com熱心網友回復:
如果光查詢ID的話,應該不會太慢,你是不是所其他屬性也拿出來了?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/60902.html
標籤:MySQL
上一篇:mysql報錯 Packets out of order. Expected 1 received 46. Packet size=3158064
