比如我有一張表tableA,2億條記錄,15個欄位左右,沒有特別建立索引,主鍵是一個ID列,不考慮按月份分表,分庫的情況。目前是按年分表,這個查詢的目的是要查詢所有用戶在指定的時間段內,最后的登陸時間的那條記錄。
在sql server的ssms里運行了以下查詢陳述句:
select t1.id,t1.姓名,t1.登陸時間,......
from tableA AS t1
right outer join
(
select 姓名,MAX(登陸時間)
from tableA where 登陸時間 between '開始時間' and '結束時間' group by 姓名
) as t2
on t1.姓名=t2.姓名 and t1.登陸時間=t2.登陸時間
整個陳述句運行大概需要10分鐘左右,我單獨測驗了每條陳述句,以下這句話的查詢時間大概在80秒左右:
select 姓名,MAX(登陸時間)
from tableA where 登陸時間 between '開始時間' and '結束時間' group by 姓名
后來測驗了按月分表的情況,嵌套的類似上面的陳述句,大概在2秒多,總體的在20秒左右,情況有明顯。目前我的疑問就是差距為什么這么大,我實在不想按月分表,臨時表和存盤程序能解決這個問題么?這兩種方案我不熟,沒有測驗,資料庫操作水平有限,邊摸索邊試驗的,但是看了臨時表和存盤程序的介紹,感覺臨時表和存盤程序無法解決查詢速度快慢的問題。
分數有限,請諒解,討論技術。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/167246.html
標籤:基礎類
上一篇:資料庫的隔離級別
下一篇:SQLSERVER查詢出錯,修復出錯,邏輯 I/O 錯誤 ,無法使用閂鎖型別,DROP表洗掉也不讓刪,哭了~,全部積分奉上,求大神指點,不睡覺在線等。
