mysql 中间表的好处_Mysql中使用中间表提高统计查询速度
對于數據量較大的表,在其上進行統計查詢通常會效率很低,并且還要考慮統計查詢是否會對在線的應用產生負面影響。通常在這種情況下,使用中間表可以提高統計查詢的效率,
下面通過對session 表的統計來介紹中間表的使用:
(1)session 表記錄了客戶每天的消費記錄,表結構如下:CREATE TABLE session (
cust_id varchar(10) , --客戶編號
cust_amount DECIMAL(16,2), --客戶消費金額
cust_date DATE, --客戶消費時間
cust_ip varchar(20) –客戶IP 地址
)
(2)由于每天都會產生大量的客戶消費記錄,所以session 表的數據量很大,現在業務部門有一具體的需求:希望了解最近一周客戶的消費總金額和近一周每天不同時段用戶的消費總金額。針對這一需求我們通過2 種方法來得出業務部門想要的結果。
方法1:在session 表上直接進行統計,得出想要的結果。mysql> select sum(cust_amount) from session where cust_date>adddate(now(),-7);
+------------------+
| sum(cust_amount) |
+------------------+
| 161699200.64 |
+------------------+
1 row in set (3.95 sec)
方法2:創建中間表tmp_session,表結構和源表結構完全相同。CREATE TABLE tmp_session (
cust_id varchar(10) , --客戶編號
cust_amount DECIMAL(16,2), --客戶消費金額
cust_date DATE, --客戶消費時間
cust_ip varchar(20) –客戶IP 地址
) ;
轉移要統計的數據到中間表,然后在中間表上進行統計,得出想要的結果。mysql> insert into tmp_session select * from session where cust_date>adddate(now(),-7);
Query OK, 1573328 rows affected (6.67 sec)
Records: 1573328 Duplicates: 0 Warnings: 0mysql> select sum(cust_amount) from tmp_session;
+------------------+
| sum(cust_amount) |
+------------------+
| 161699200.64 |
+------------------+
1 row in set (0.73 sec)
從上面的2 種實現方法上看,在中間表中做統計花費的時間很少(這里不計算轉移數據花費的時間),另外,針對業務部門想了解“近一周每天不同時段用戶的消費總金額”這一需求,在中間表上給出統計結果更為合適,原因是源數據表(session 表)cust_date 字段沒有索引并且源表的數據量較大,所以在按時間進行分時段統計時效率很低,這時可以在中間表上對cust_date 字段創建單獨的索引來提高統計查詢的速度。
中間表在統計查詢中經常會用到,其優點如下:
? 中間表復制源表部分數據,并且與源表相“隔離”,在中間表上做統計查詢不
會對在線應用產生負面影響。
? 中間表上可以靈活的添加索引或增加臨時用的新字段,從而達到提高統計查詢
效率和輔助統計查詢作用。
總結
以上是生活随笔為你收集整理的mysql 中间表的好处_Mysql中使用中间表提高统计查询速度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓高配置手机(安卓高配)
- 下一篇: mysql怎么查看刷脏页慢_一条SQL查