MySQL是一種常用的關系型數據庫,隨著數據量的增加,數據表的規模也會越來越大。為了提高查詢效率,可以使用分表技術將大型表按照某個規則進行分割。但是,當需要查詢某個維度的數據時就需要考慮如何合并分表的數據。
-- 創建訂單主表 CREATE TABLE orders_main ( order_id INT PRIMARY KEY, customer_id INT, order_time DATETIME, order_total DECIMAL(10,2) ); -- 創建訂單詳情表 CREATE TABLE orders_detail_1 ( order_id INT, product_id INT, product_name VARCHAR(50), product_price DECIMAL(10,2), product_num INT, PRIMARY KEY (order_id, product_id) ); -- 創建訂單詳情表 CREATE TABLE orders_detail_2 ( order_id INT, product_id INT, product_name VARCHAR(50), product_price DECIMAL(10,2), product_num INT, PRIMARY KEY (order_id, product_id) );
假設我們需要查詢按照時間段查詢訂單總金額。可以使用UNION ALL將分表的數據進行合并,并使用GROUP BY和SUM函數計算總金額。
-- 按照時間段查詢訂單總金額 SELECT DATE_FORMAT(order_time, '%Y-%m') AS time, SUM(order_total) AS total_amount FROM ( SELECT order_time, order_total FROM orders_main WHERE order_time BETWEEN '2022-01-01' AND '2022-12-31' UNION ALL SELECT order_time, order_total FROM orders_detail_1 JOIN orders_main ON orders_detail_1.order_id = orders_main.order_id WHERE order_time BETWEEN '2022-01-01' AND '2022-12-31' UNION ALL SELECT order_time, order_total FROM orders_detail_2 JOIN orders_main ON orders_detail_2.order_id = orders_main.order_id WHERE order_time BETWEEN '2022-01-01' AND '2022-12-31' ) AS order_all GROUP BY time;
這樣,我們可以得到按照時間段的訂單總金額。在查詢時,UNION ALL會將結果合并在一起,需要注意字段的對應關系,以便正確統計結果。