San*_*ana 2 sql-server optimization sql-server-2012
我有下表:
create table Order_Details
(
ID int not null primary key
,Order_ID int
,Order_Description nvarchar(40)
)
Run Code Online (Sandbox Code Playgroud)
我们在上表中插入了 27,500,000 行,当我在查询下面运行时,它需要 6-7 秒。
select ID,Order_ID, Order_Description
from Order_Details
where Order_Description like '%Football Size%'
Run Code Online (Sandbox Code Playgroud)
我在Order_Description包含ID和应用了非聚集索引Order_ID。
还有其他方法可以优化查询并以更快的方式获得结果吗?
问题是双通配符在 SQL Server 中'%string searches%'很慢,因为我们本机没有花哨的三元组搜索。
即使在字符串搜索列上有一个索引,我们也必须读取每一行。
CREATE NONCLUSTERED INDEX ix_displayname ON dbo.Users(DisplayName)
SELECT u.Id, u.Reputation, u.DisplayName
FROM dbo.Users AS u
WHERE u.DisplayName LIKE '%Christopher%'
Run Code Online (Sandbox Code Playgroud)
如果您只搜索一个字符串(从来都不是这种情况),或者您有一组有限的已知搜索字符串,则索引计算列(或多个列)可能对您有利。
ALTER TABLE dbo.Users ADD SearchString
AS CONVERT(BIT, CASE WHEN DisplayName LIKE '%Christopher%' THEN 1 ELSE 0 END)
CREATE INDEX ix_yourmom ON dbo.Users (SearchString)
Run Code Online (Sandbox Code Playgroud)
否则,您将不得不想出一种更好的方法来定位不涉及搜索文本的数据,例如OrderLines按照可以在 ID 上搜索的顺序跟踪每个项目的表格。
| 归档时间: |
|
| 查看次数: |
6457 次 |
| 最近记录: |