在一開始,我很抱歉,因爲我的英文不完美。SQL Server:優化查詢。很多數據
我有兩個表在我的數據庫,一個包含了問題,第二個包含了用戶的問題答案(統計)。
表A - 問題
___________
| ID | Name |
表B - 統計
___________________________________
| ID | A_ID | U_ID| IsCorrect | Date|
用戶可以回答一個問題幾次,例如,如果我們有ID = 1和用戶(ID爲2)的問題,其回答這個問題4次,我們會在表B中加4行:
___________________________________
| ID | A_ID | U_ID| IsCorrect | Date|
-------------------------------------
| 1 | 1 | 2 | True | Date|
| 2 | 1 | 2 | False | Date|
| 3 | 1 | 2 | False | Date|
| 4 | 1 | 2 | True | Date|
最後我得q如果問題(表A)用戶沒有回答或回答,但最少的次數(用戶能夠回答所有問題)。
我的查詢(過程)是這樣的:
Declare @max int
SET @max = (SELECT TOP 1 Count(A_ID) as QuestionCount FROM [TableB]
Where User_id = 1
GROUP BY A_ID
ORDER BY QuestionCount DESC)
SELECT TOP 40 ID
FROM [dbo].[TableA]
WHERE ID NOT IN (SELECT A_ID
FROM [dbo].[TableB]
WHERE User_id = 1
GROUP BY A_ID
HAVING Count(A_ID) = @max)
ORDER BY NewID()
在beggining我查詢的問題的最大occurence - 如果用戶回答了一些問題4時@Max將爲4
在第二個查詢我查詢尚未回答的問題(在此發生)。
的問題是:如何優化這個查詢(或者也許我應該改變我的表)?現在TableB有近一百萬行,因爲它不夠快。
「差不多一百萬行」時甚至還沒有接近「大數據「 –
好點,我改了標題 –