挑战ASP+SQLServer性能极限,千万级数据量搜索优化,希望高手参与讨论
一个数据量超过1000万的用户表,
包括姓名,地区,性别,生日,血型,收入情况,人气...等详细个人信息字段(字段数量超过30)
t_User:
--------------------------------
ID (int)
Name (nvarchar)
Gener (tinyint)
Birthday (datetime)
Location (int)
....
常用组合查询 地区+性别+年龄段 每天查询量10000次以上,可能有并发
不常用的组合查询 地区+性别+年龄+血型+收入情况+职业 每天查询量1000次以上,基本没有并发
原来系统设计:
对参与常用搜索的字段分别建立索引,平均搜索时间2分钟以上,CPU占用长期100%
求优化设计建议!
附原组合查询ASP代码:
-----------------------------------------------------------------------
SearchStr = "Select AccountID,NickName,Gender,Birthday,Height,Location,UpdateTime,Hot From t_Character Where 1=1"
If Request.Form("Gender")<>"" Then SearchStr = SearchStr & " And Gender=" & cint(Request.Form("Gender"))
If Request.Form("Age1")<>"" Then SearchStr = SearchStr & " And Birthday<='" & Year(Date)-Request.Form("Age1") & "-12-31'"
If Request.Form("Age2")<>"" Then SearchStr = SearchStr & " And Birthday>='" & Year(Date)-Request.Form("Age2") & "-1-1'"
If Request.Form("Height1")<>"" Then SearchStr = SearchStr & " And Height>=" & cint(Request.Form("Height1"))
If Request.Form("Height2")<>"" Then SearchStr = SearchStr & " And Height<=" & cint(Request.Form("Height2"))
If Request.Form("Weight1")<>"" Then SearchStr = SearchStr & " And Weight>=" & cint(Request.Form("Weight1"))
If Request.Form("Weight2")<>"" Then SearchStr = SearchStr & " And Weight<=" & cint(Request.Form("Weight2"))
If Request.Form("FindType")<>"" Then SearchStr = SearchStr & " And FindType=" & cint(Request.Form("FindType"))
If Request.Form("Marriage")<>"" Then SearchStr = SearchStr & " And Marriage=" & cint(Request.Form("Marriage"))
If Request.Form("Job")<>"" Then SearchStr = SearchStr & " And Job=" & cint(Request.Form("Job"))
If Request.Form("Income")<>"" Then SearchStr = SearchStr & " And Income=" & cint(Request.Form("Income"))
If Request.Form("Education")<>"" Then SearchStr = SearchStr & " And Education=" & cint(Request.Form("Education"))
If Request.Form("Blood")<>"" Then SearchStr = SearchStr & " And Blood=" & cint(Request.Form("Blood"))
If Request.Form("Location")<>"" Then SearchStr = SearchStr & " And Location=" & cint(Request.Form("Location"))
If Request.Form("UpdateTime")<>"" Then SearchStr = SearchStr & " And LastLoginTime <= '" & DateAdd("D",cint(Request.Form("UpdateTime")),Now()) & "'"
'SearchStr为最终的查询语句