在一开始,我很抱歉,因为我的英文不完美。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有近一百万行,因为它不够快。
“差不多一百万行”时甚至还没有接近“大数据“ –
好点,我改了标题 –