SQLServer數(shù)據(jù)庫查詢優(yōu)化的常用方法總結(jié)

字號:

SQL Server數(shù)據(jù)庫查詢優(yōu)化的常用方法總結(jié):
    本文中,abigale代表查詢字符串,ada代表數(shù)據(jù)表名,alice代表字段名。
    技巧一:
    問題類型:ACCESS數(shù)據(jù)庫字段中含有日文片假名或其它不明字符時查詢會提示內(nèi)存溢出。
    解決方法:修改查詢語句
    sql="select * from ada where alice like '%"&abigale&"%'"
    改為
    sql="select * from ada"
    rs.filter = "alice like '%"&abigale&"%'"
    技巧二:
    問題類型:如何用簡易的辦法實現(xiàn)類似百度的多關(guān)鍵詞查詢(多關(guān)鍵詞用空格或其它符號間隔)。
    解決方法:
    '//用空格分割查詢字符串
    ck=split(abigale," ")
    '//得到分割后的數(shù)量
    sck=UBound(ck)
    sql="select * ada where"
    在一個字段中查詢
    For i = 0 To sck
    SQL = SQL & tempJoinWord & "(" & _
    "alice like '"&ck(i)&"%')"
    tempJoinWord = " and "
    Next
    在二個字段中同時查詢
    For i = 0 To sck
    SQL = SQL & tempJoinWord & "(" & _
    "alice like '"&ck(i)&"%' or " & _
    "alice1 like '"&ck(i)&"%')"
    tempJoinabigale = " and "
    Next  技巧三:提高查詢效率的幾種技巧
    1. 盡量不要使用 or,使用or會引起全表掃描,將大大降低查詢效率。
    2. 經(jīng)過實踐驗證,charindex()并不比前面加%的like更能提高查詢效率,并且charindex()會使索引失去作用(指sqlserver數(shù)據(jù)庫)
    3. alice like '%"&abigale&"%' 會使索引不起作用
    like '"&abigale&"%' 會使索引起作用(去掉前面的%符號)
    (指sqlserver數(shù)據(jù)庫)
    4. '%"&abigale&"%' 與'"&abigale&"%' 在查詢時的區(qū)別:
    比如你的字段內(nèi)容為:斯卡布羅集市
    '%"&abigale&"%' :會通配所有字符串,不論查“集市”還是查“斯卡”,都會顯示結(jié)果。
    '"&abigale&"%' :只通配前面的字符串,例如查“集市”是沒有結(jié)果的,只有查“斯卡”,才會顯示結(jié)果。
    5. 字段提取要按照“需多少、提多少”的原則,避免“select *”,盡量使用“select 字段1,字段2,字段3........”。實踐證明:每少提取一個字段,數(shù)據(jù)的提取速度就會有相應(yīng)的提升。提升的速度還要看您舍棄的字段的大小來判斷。
    6. order by按聚集索引列排序效率。一個sqlserver數(shù)據(jù)表只能建立一個聚集索引,一般默認為ID,也可以改為其它的字段。
    7. 為你的表建立適當?shù)乃饕?,建立索引可以使你的查詢速度提高幾十幾百倍。(指sqlserver數(shù)據(jù)庫)
    以下是建立索引與不建立索引的一個查詢效率分析:
    Sqlserver索引與查詢效率分析。
    表 News
    字段
    Id:自動編號
    Title:文章標題
    Author:作者
    Content:內(nèi)容
    Star:優(yōu)先級
    Addtime:時間
    記錄:100萬條
    測試機器:P4 2.8/1G內(nèi)存/IDE硬盤
    方案1:
    主鍵Id,默認為聚集索引,不建立其它非聚集索引
    select * from News where Title like '%"&abigale&"%'
    or Author like '%"&abigale&"%' order by Id desc
    從字段Title和Author中模糊檢索,按Id排序
    查詢時間:50秒
    方案2:
    主鍵Id,默認為聚集索引
    在Title、Author、Star上建立非聚集索引
    select * from News where Title like '"&abigale&"%'
    or Author like '"&abigale&"%' order by Id desc
    從字段Title和Author中模糊檢索,按Id排序
    查詢時間:2 - 2.5秒
    方案3:
    主鍵Id,默認為聚集索引
    在Title、Author、Star上建立非聚集索引
    select * from News where Title like '"&abigale&"%'
    or Author like '"&abigale&"%' order by Star desc
    從字段Title和Author中模糊檢索,按Star排序
    查詢時間:2 秒
    方案4:
    主鍵Id,默認為聚集索引
    在Title、Author、Star上建立非聚集索引
    select * from News where Title like '"&abigale&"%' or Author like '"&abigale&"%'
    從字段Title和Author中模糊檢索,不排序查詢時間:1.8 - 2 秒
    方案5:
    主鍵Id,默認為聚集索引
    在Title、Author、Star上建立非聚集索引
    select * from News where Title like '"&abigale&"%'
    或
    select * from News where Author like '"&abigale&"%'從字段Title 或 Author中檢索,不排序查詢時間:1秒