上接SQL Server 查询性能优化——索引与SARG(三)
说明:下文中所说的创建索引都是SQL Server 查询性能优化——索引与SARG(一)中开头部分所说明的索引列表中的索引。 例:下面表格中说的索引1(聚集索引)和索引5(非聚集索引)
4: 小心使用OR操作符
如上文SQL Server 查询性能优化——索引与SARG(三)中的例子中WBK_PDE_LIST_ORG_HISTROY表创建了索引2,即在[QTY_1] 字段建立索引,通过该索引.就可以从大量记录中.快速找出符合记录的记录(如上文中的“2 请不要进行负向查询”中表格中的序号2,逻辑读取43次,执行成本0.121935),再在少量的数据过滤COP_G_NO='60207106'的记录,因此可以发挥索引的功能。但若使用的是OR 操作,则需要所有字段都有索引可用,查询语句改成如下:
SELECT * FROM [WBK_PDE_LIST_ORG_HISTROY] where qty_1=312 or COP_G_NO='60207106'
而当COP_G_NO字段没有适用索引时,直接扫描整个数据表。
序号
逻辑读
执行成本
查询语句
SELECT [WBOOK_NO] ,[COP_G_NO],[G_NO],[CODE_T],[QTY_1],[UNIT_1]
,[TRADE_TOTAL],[GROSS_WT] FROM [WBK_PDE_LIST_ORG_HISTROY]
where qty_1=312 or COP_G_NO='60207106'
SELECT [WBOOK_NO] ,[COP_G_NO],[G_NO],[CODE_T],[QTY_1],[UNIT_1],[TRADE_TOTAL],[GROSS_WT]
FROM [WBK_PDE_LIST_ORG_HISTROY] where qty_1=2 or COP_G_NO='60207106'