SQL Server索引统计信息未及时更新,导致排序混乱
今天,遇到了这样的一个例子:
SQL Server索引统计信息未及时更新,导致排序混乱
我们知道,在sql
server上创建索引后,同时会对该索引上的值进行排序,但对于新增加的值,如果未能及时更新统计信息,将有可能导致排序的混乱,也就是没有排序。
这是产生问题的语句:
Select * from V_L_IcStockProInEntry Where FInterID= '329482'
V_L_IcStockProInEntry是一个视图,其语句如下:
SELECT t2.FInterID, t2.FSeq,
t2.FItemID, t2.FMustQty, t2.FQty
from dbo.IcStockProIn AS t1 INNER JOIN
dbo.
IcStockProInEntry
AS t2 ON t1.FInterID = t2.FInterID LEFT OUTER JOIN
dbo.t_IcItem AS t3 ON t2.FItemID = t3.FItemID LEFT OUTER JOIN
dbo.IcProductTrace AS d ON t2.FTraceInterid = d.FInterID LEFT OUTER
JOIN
dbo.t_IcItemPrimary AS e ON d.FMainItemID = e.FItemID LEFT OUTER JOIN
dbo.t_EventType AS t10 ON t2.FQulityID = t10.FID LEFT OUTER JOIN
dbo.t_Customer AS h ON t2.FCustID = h.FID LEFT OUTER JOIN
dbo.V_WorkItem AS i ON t2.FStWorkItemID = i.FitemID LEFT OUTER JOIN
dbo.IcShopMo
AS G ON
G.FinterID = t2.FSourceInterID
查询的结果是finterid对应的多个fseq值未能正常排序。
finterid和fseq
属于icstockproinentry表的列,在这两列上有个聚集索引,所以会自动的排序。但由于数据更新较快,新插入的值未能及时有效排序,所以导致
了排序的混乱。
首先来看下统计信息:
dbcc show_statistics('IcStockProInEntry',PK_IcStockProInEntry)
RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS
AVG_RANGE_ROWS
3 0 1 0 1
...
....
282987 101155 6 27942 3.620178
288803 18440 1 5253 3.510375
296886 24587 6 &nb
相关文档:
一、 简单查询
简单的Transact-SQL查询只包括选择列表、from子句和WHERE子句。它们分别说明所查询列、查询的
表或视图、以及搜索条件等。
例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。
SELECT nickname,email
from testtable
WHERE name='张三'
(一) 选择 ......
drop table father;
create table father(
id int identity(1,1) primary key,
name varchar(20) not null,
age int not null
)
drop table mother;
create table mother(
id int identity(1,1),
name varchar(20) not null,
age int not null,
husban ......
例如问题:现在你面对一张表 table1 , table1中有个字段为sales_salary ,在数据库存放的字段为int 类型 。
要求,你统计的结果单位(万元),保留2位小数。并且会有这样的等式 (1行+2行=3行=7行+8行) 面对这样的问题,解决的方案有很多。比如,你可以通过视图的方案来解决,或控制输入域 ...
但有一种等效控制输入 ......
在Visual Studio 2008 中使用O/R设计器:
点添加项目,选择创建Linq to SQL项目,使用服务器资源管理器连接Northwind数据库,将Customers和Orders两个表拖到设计界面上,系统会自动创建app.config和Northwid.designer.cs,前者是配置连接数据库的连接字串;后者会生成一个继承自DataContext的类:NorthwindDataContext。
......
注释:只适合单表单列数据,
create database test
go
use test
go
create table users
(
:id int identity(1,1) primary key not null,
:name nvarchar(20)
)
go
create proc sp_Inserts
@Names nvarchar(4000)
as
declare @Name nvarchar(20),@ErrorSum int
:set @ErrorSum = 0
:begin tra ......