用SQL Server 2005索引视图提高性能二

SQL Server 2005基础教程与实践指南 本文还有配套的精品资源,点击获取 简介:SQL Server 2005是微软推出的经典关系型数据库管理系统。本教程通过详细的配套课件和脚本,帮助初学者全面掌握SQL Server 2005的核心概念、管理操作和高级特性。教程涵盖了SQL语言基础、数据库与表的管理、索引使用、存储过程和视图的创建与维护、触发器的定义与应用、事务处理的ACID原则、数据库安全性控制以及备份与恢复... 阅读详情

 视图限制
  
  如要在 SQL Server 2005 中的视图上创建一个索引,相应的视图定义必须包含:
  
  ANY、NOT ANY                        OPENROWSET、OPENQUERY、OPENDATASOURCE
  
  不精确的(浮型、实型)值上的算术              OPENXML
  
  COMPUTE、COMPUTE BY                     ORDER BY
  
  CONVERT 生成一个不精确的结果                OUTER 联接
  
  COUNT(*)                          引用带有一个已禁用的聚集索引的基表
  
  GROUP BY ALL                        引用不同数据库中的表或函数
  
  派生的表(FROM 列表中的子查询)               引用另一个视图
  
  DISTINCT                          ROWSET 函数
  
  EXISTS、NOT EXISTS                     自联接
  
  聚合结果(比如:SUM(x)+SUM(x))上的表达式          STDEV、STDEVP、VAR、VARP、AVG
  
  全文谓词 (CONTAINS、FREETEXT、CONTAINSTABLE、FREETEXTTABLE) 子查询
  
  不精确的常量(比如:2.34e5)                可为空的表达式上的 SUM
  
  内嵌或表值函数                       表提示(比如:NOLOCK)
  
  MIN、MAX                          text、ntext、image、filestream 或 XML 列
  
  不具有确定性的表达式                    TOP
  
  非 unicode 排序                       UNION
  
  SQL Server 2005 可检测到的矛盾情况表示视图将为空(比如,当 0=1 及 ...)
  
  注意 索引视图可能包含浮型和实型列;但是,如果这类列为非永久性的计算列,则不能包含在聚集索引键中。
  
  GROUP BY 限制
  
  如果存在 GROUP BY,VIEW 定义为:
  
  一定包含 COUNT_BIG(*)。
  
  一定不包含 HAVING、CUBE、ROLLUP 或 GROUPING()。
  
  这些限制仅适用于索引视图定义。即便不能满足上述 GROUP BY 限制,查询也可以在其执行计划中使用索引视图。
  
  有关索引的要求
  
  执行 CREATE INDEX 语句的用户必须是视图所有者。
  
  如果视图定义包含 GROUP BY 子句,唯一的聚集索引的键只能引用 GROUP BY 子句所指定的列。
  
  一定不能在启用 IGNORE_DUP_KEY 选项的情况下创建索引。
  
  六、示例
  
  本节中的例子阐述了如何结合两类主要的查询使用索引视图:聚合和联接。同时,说明了查询优化器在确定某个索引视图是否适用时所用的条件。有关完整的条件列表的信息,参阅“查询优化器如何使用索引视图”。
  
  这些查询基于 AdventureWorks 中的表。AdventureWorks 是 SQL Server 2005 所提供的示例数据库,并可作为写入方式来执行。在创建视图前后,用户可能想用 SQL Server Management Studio 中显示预计的执行计划工具,来查看查询优化器所选择的计划。虽然这些例子说明了优化器选择低成本执行计划的方式,但是 AdventureWorks 示例由于太小而无法显示出性能方面的提升。
  
  在开始运用这些示例之前,确保通过运行下列命令对会话设置正确的选项:
  
  设置
  SET ANSI_NULLS ON
  SET ANSI_PADDING ON
  SET ANSI_WARNINGS ON
  SET CONCAT_NULL_YIELDS_NULL ON
  SET NUMERIC_ROUNDABORT OFF
  SET QUOTED_IDENTIFIER ON
  SET ARITHABORT ON
  
  下列查询显示了两种方法用于从 Sales.SalesOrderDetail 表返回具有最大总折扣的五个产品。
  
  查询 1
  SELECT TOP 5 ProductID, Sum(UnitPrice*OrderQty) -
  Sum(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rebate
  FROM Sales.SalesOrderDetail
  GROUP BY ProductID
  ORDER BY Rebate DESC
  
  查询 2
  SELECT TOP 5 ProductID,
  SUM(UnitPrice*OrderQty*UnitPriceDiscount) AS Rebate
  FROM Sales.SalesOrderDetail
  GROUP BY ProductID
  ORDER BY Rebate DESC
  
  查询优化器所选的执行计划包含:
  
  一个聚集索引扫描,位于估计行数为 121,317 的 Sales.SalesOrderDetail 表上。
  
  一个哈希匹配/聚合操作符,用于将所选的行放入基于 GROUP BY 列的哈希表,并计算每行的 SUM 聚合。
  
  一个 TOP 5 分类操作符,基于 ORDER BY 子句。
  
  视图 1
  
  添加包含 Rebate 列所需聚合的索引视图将更改“查询 1”的查询执行计划。在大型表(含数百万行)上,查询的性能也会得到大幅提升。
  
  CREATE VIEW Vdiscount1 WITH SCHEMABINDING AS
  SELECT SUM(UnitPrice*OrderQty) AS SumPrice,
  SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS SumDiscountPrice,
  COUNT_BIG(*) AS Count, ProductID
  FROM Sales.SalesOrderDetail
  GROUP BY ProductID
  GO
  CREATE UNIQUE CLUSTERED INDEX VDiscountInd ON Vdiscount1 (ProductID)
  
  第一个查询的执行计划显示 Vdiscount1 视图被优化器所用。然而,该视图将不被第二个查询所用,因为其不包含 SUM(UnitPrice*OrderQty*UnitPriceDiscount) 聚合。可再创建一个索引视图,来同时应付这两个查询。
  
  视图 2
  CREATE VIEW Vdiscount2 WITH SCHEMABINDING AS

 SELECT SUM(UnitPrice*OrderQty)AS SumPrice,
  SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount))AS SumDiscountPrice,
  SUM(UnitPrice*OrderQty*UnitPriceDiscount)AS SumDiscountPrice2,
  COUNT_BIG(*) AS Count, ProductID
  FROM Sales.SalesOrderDetail
  GROUP BY ProductID
  GO
  CREATE UNIQUE CLUSTERED INDEX VDiscountInd ON Vdiscount2 (ProductID)
  
  使用这个索引视图,在丢弃 Vdiscount1 后,这两个查询的查询执行计划现在包含:
  
  一个聚集索引扫描,位于估计行数为 266 的 Vdiscount2 视图上
  
  一个 TOP 5 分类函数,基于 ORDER BY 子句
  
  查询优化器选择了该视图,因为虽然没有在查询中引用该视图,但其提供了最低的执行成本。
  
  查询 3
  
  “查询 3”与上述查询类似,但 ProductID 被列 SalesOrderID (未包含在视图定义中)所替换。这违反了条件:视图定义中表上的选择列表中的所有表达式必须派生自视图选择列表,以便使用查询计划中的索引视图。
  
  SELECT TOP 3 SalesOrderID,
  SUM(UnitPrice*OrderQty*UnitPriceDiscount) OrderRebate
  FROM Sales.SalesOrderDetail
  GROUP BY SalesOrderID
  ORDER BY OrderRebate DESC
  必须用一个单独的索引视图来应付该查询。可修改 Vdiscount2 以包含 SalesOrderID;但是,结果视图将和原始表包含同样多的行,并不会通过使用基表提高性能。
  
  查询 4
  
  该查询可生成每个产品的平均价格。
  
  SELECT p.Name, od.ProductID,
  AVG(od.UnitPrice*(1.00-od.UnitPriceDiscount)) AS AvgPrice,
  SUM(od.OrderQty) AS Units
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p
  WHERE od.ProductID=p.ProductID
  GROUP BY p.Name, od.ProductID
  
  复杂的聚合(比如:STDEV、VARIANCE、AVG)不能包含在索引视图的定义中。然而,通过包含(经组合)执行复杂聚合的一些简单的聚合函数,索引视图可用以执行含 AVG 的查询。
  
  视图 3
  
  该索引视图包含执行 AVG 函数所需的简单聚合函数。在创建“视图 3”后执行“查询 4”时,执行计划将显示所用的视图。优化器可从视图的简单聚合列 Price 和 Count 派生 AVG 表达式。
  
  CREATE VIEW View3 WITH SCHEMABINDING AS
  SELECT ProductID, SUM(UnitPrice*(1.00-UnitPriceDiscount)) AS Price,
  COUNT_BIG(*) AS Count, SUM(OrderQty) AS Units
  FROM Sales.SalesOrderDetail
  GROUP BY ProductID
  GO
  CREATE UNIQUE CLUSTERED INDEX iv3 ON View3 (ProductID)
  
  查询 5
  
  该查询与“查询 4”相同,但包含一个附加的搜索条件。即使附加的搜索条件只从未包含在视图定义中的表引用列,“视图 3”也将作用于该查询。
  
  SELECT p.Name, od.ProductID,
  AVG(od.UnitPrice*(1.00-UnitPriceDiscount)) AS AvgPrice,
  SUM(od.OrderQty) AS Units
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p
  WHERE od.ProductID=p.ProductID AND p.Name like '%Red%'
  GROUP BY p.Name, od.ProductID
  
  查询 6
  
  查询优化器无法对该查询使用“视图 3”。添加的搜索条件 od.UnitPrice>10 包含来自视图定义中表的列,但该列不显示在 GROUP BY 列表中,而搜索谓词也不显示在视图定义中。
  
  SELECT p.Name, od.ProductID,
  AVG(od.UnitPrice*(1.00-UnitPriceDiscount)) AS AvgPrice,
  SUM(od.OrderQty) AS Units
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p
  WHERE od.ProductID=p.ProductID AND p.Name like '%Red%'
  GROUP BY p.Name, od.ProductID
  
  查询 7
  
  相反,查询优化器可对“查询 7”使用“视图 3”,因为新的搜索条件 od.ProductID in (1,2,13,41) 中定义的列包含在视图定义的 GROUP BY 子句中。
  
  SELECT p.Name, od.ProductID,
  AVG(od.UnitPrice*(1.00-UnitPriceDiscount)) AS AvgPrice,
  SUM(od.OrderQty) AS Units
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p
  WHERE od.ProductID = p.ProductID AND od.UnitPrice > 10
  GROUP BY p.Name, od.ProductID
  
  视图 4
  
  通过包含视图定义中的 SumPrice 和 Count 列以便计算查询中的 AVG,该视图将满足“查询 6”的条件。
  
  CREATE VIEW View4 WITH SCHEMABINDING AS
  SELECT p.Name, od.ProductID,
  SUM(od.UnitPrice*(1.00-UnitPriceDiscount)) AS SumPrice,
  SUM(od.OrderQty) AS Units, COUNT_BIG(*) AS Count
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p
  WHERE od.ProductID = p.ProductID AND od.UnitPrice > 10
  GROUP BY p.Name, od.ProductID
  GO
  CREATE UNIQUE CLUSTERED INDEX VdiscountInd on View4 (Name, ProductID)
  
  查询 8
  
  “视图 4”上相同的索引也将用于在其中添加对表 Sales.SalesOrderHeader 的联接的查询。该查询满足条件:查询 FROM 子句中所列的表是索引视图的 FROM 子句中的表的超集。
  
  SELECT p.Name, od.ProductID,
  AVG(od.UnitPrice*(1.00-UnitPriceDiscount)) AS AvgPrice,
  SUM(od.OrderQty) AS Units
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p,
  Sales.SalesOrderHeader AS o
WHERE od.ProductID = p.ProductID AND o.SalesOrderID = od.SalesOrderID
  AND od.UnitPrice > 10
  GROUP BY p.Name, od.ProductID
  
  最后两个查询在“查询 8”的基础上进行了修改。每个修改后的查询都违反了优化器的条件之一,并且不同于“查询 8”,无法使用“视图 4”。
  
  查询 8a
  
  “查询 8a”(Q8a) 无法使用索引视图,因为 WHERE 子句无法将视图定义中的 UnitPrice > 10 与查询中的 UnitPrice > 25 相匹配,而且 UnitPrice 未出现在视图中。查询搜索条件谓词必须是视图定义中的搜索条件谓词的超集。
  
  SELECT p.Name, od.ProductID, AVG(od.UnitPrice*(1.00-UnitPriceDiscount))
  AvgPrice, SUM(od.OrderQty) AS Units
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p,
  Sales.SalesOrderHeader AS o
  WHERE od.ProductID = p.ProductID AND o.SalesOrderID = od.SalesOrderID
  AND od.UnitPrice > 25
  GROUP BY p.Name, od.ProductID
  查询 8b
  
  注意,表 Sales.SalesOrderHeader 不加入索引视图 V4 定义。尽管这样,在该表上添加一个谓词将不允许使用索引视图,因为所添加的谓词可能会更改或消除加入下方“查询 8b”所示的聚合的其他行。
  
  SELECT p.Name, od.ProductID, AVG(od.UnitPrice*(1.00-UnitPriceDiscount))
  AS AvgPrice, SUM(od.OrderQty) AS Units
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p,
  Sales.SalesOrderHeader AS o
  WHERE od.ProductID = p.ProductID AND o.SalesOrderID = od.SalesOrderID
  AND od.UnitPrice > 10 AND o.OrderDate > '20040728'
  GROUP BY p.Name, od.ProductID
  
  视图 4a
  
  “视图 4a”通过将 UnitPrice 列包含在选择列表和 GROUP BY 子句中,扩展了“视图 4”。“查询 8a”可使用“视图 4a”,因为将进一步筛选 UnitPrice 值(已知大于 10)以便只留下大于 25 的值。以下是间隔归入的一个例子。
  
  CREATE VIEW View4a WITH SCHEMABINDING AS
  SELECT p.Name, od.ProductID, od.UnitPrice,
  SUM(od.UnitPrice*(1.00-UnitPriceDiscount)) AS SumPrice,
  SUM(od.OrderQty) AS Units, COUNT_BIG(*) AS Count
  FROM Sales.SalesOrderDetail AS od, Production.Product AS p
  WHERE od.ProductID = p.ProductID AND od.UnitPrice > 10
  GROUP BY p.Name, od.ProductID, od.UnitPrice
  GO
  CREATE UNIQUE CLUSTERED INDEX VdiscountInd
  ON View4a (Name, ProductID, UnitPrice)
  视图 5
  
  “视图 5”在其选择和 GROUP BY 列表中包含一个表达式。请注意,LineTotal 是一个计算列,因此本身是一个表达式。反过来,该表达式嵌套在对 FLOOR 函数的调用中。
  
  CREATE VIEW View5 WITH SCHEMABINDING AS
  SELECT FLOOR(LineTotal) FloorTotal, COUNT_BIG(*) C
  FROM Sales.SalesOrderDetail
  GROUP BY FLOOR(LineTotal)
  GO
  CREATE UNIQUE CLUSTERED INDEX iView5 ON View5(FloorTotal)
  查询 9
  
  “查询 9”在其选择和 GROUP BY 列表中包含表达式 FLOOR(LineTotal)。通过对 SQL Server 2005 中表达式的视图匹配的新扩展,该查询使用“视图 5”上的索引。
  
  SELECT TOP 5 FLOOR(LineTotal), Count(*)
  FROM Sales.SalesOrderDetail
  GROUP BY FLOOR(LineTotal)
  ORDER BY COUNT(*) DESC
  视图 6
  
  “视图 6”存储月末三天中有关线项目的信息。这样可将这些行聚集在少量页面上,从而可以迅速应对这些天里对 Sales.SalesOrderDetail 的查询。
  
  CREATE VIEW View6 WITH SCHEMABINDING AS
  SELECT SalesOrderID, SalesOrderDetailID, CarrierTrackingNumber, OrderQty,
  ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount, rowguid,
  ModifiedDate
  FROM Sales.SalesOrderDetail
  WHERE ModifiedDate IN ( convert(datetime, '2004-07-31', 120),
  convert(datetime, '2004-07-30', 120),
  convert(datetime, '2004-07-29', 120) )
  GO
  CREATE UNIQUE CLUSTERED INDEX VEndJulyO4Ind
  ON View6(SalesOrderID, SalesOrderDetailID)
  GO
  
  查询 10
  
  下面的查询可匹配“视图 6”,同时系统可生成一个计划,用于扫描视图上的 VendJuly04Ind 索引,但不扫描整个 Sales.SalesOrderDetail 表。此查询还说明了表达式等价(由于查询中日期的顺序不同于视图,而且数据格式也不同)和谓词归入(由于查询要求将结果的子集保存在视图中)。
  
  SELECT h.*, SalesOrderDetailID, CarrierTrackingNumber, OrderQty,
  ProductID, SpecialOfferID, UnitPrice, UnitPriceDiscount, d.rowguid,
  d.ModifiedDate
  FROM Sales.SalesOrderHeader as h, Sales.SalesOrderDetail as d
  WHERE (d.ModifiedDate = '20040729' OR d.ModifiedDate = '20040730')
  and d.SalesOrderID=h.SalesOrderID
  
  视图 7
  
  开发人员有时还会发现使用索引视图强制专门的完整性约束很方便。例如,可通过索引视图强制约束:“除非列中存在多个 0 值,否则表 T 的列 a 就是唯一的”。下方索引视图“视图 7”就强制了这一约束。如果运行下面的脚本,其将成功运行直至最终的插入操作。该语句被禁止,因为其添加了一个非零重复值。
  
  USE tempdb
  GO
CREATE TABLE T(a int)
  GO
  CREATE VIEW View7 WITH SCHEMABINDING
  AS SELECT a
  FROM dbo.T
  WHERE a <> 0
  GO
  CREATE UNIQUE CLUSTERED INDEX IV on View7(a)
  GO
  -- legal:
  INSERT INTO T VALUES(1)
  INSERT INTO T VALUES(2)
  INSERT INTO T VALUES(0)
  INSERT INTO T VALUES(0) -- duplicate 0
  
  -- dissalowed:
  INSERT INTO T VALUES(2)
  
  七、有关索引视图的常见问题
  
  问:为何对可创建索引的视图类型存在限制?
  
  答:为了确保在逻辑上可对视图进行增量维护,限制创建维护成本较高的视图,并限制 SQL Server 实施的复杂性。较大的视图集不具有确定性并与内容相关;其内容的“更改”独立于 DML 操作。无法对这些内容进行索引。在其定义中调用 GETDATE 或 SUSER_SNAME 的任何视图就属于这类视图。
  
  问:视图上的第一个索引为何必须为 CLUSTERED 和 UNIQUE?
  
  答:必须为 UNIQUE 以便在维护索引视图期间,轻松地按键值查找视图中的记录,并阻止创建带有重复项目的视图(要求维护特殊的逻辑)。必须为 CLUSTERED,因为只有聚集索引才能在强制唯一性的同时存储行。
  
  问:为何查询优化器不选取我的索引视图用于查询计划?
  
  答:优化器不选取索引视图主要有三种原因:
  
  (1) 使用 SQL Server Enterprise 或 Developer 版本之外的其他版本。只有 Enterprise 和 Developer 版本才支持自动的查询对索引视图匹配。按名称引用索引视图并包含 NOEXPAND 提示,让查询处理器使用所有其他版本中的索引视图。
  
  (2) 使用索引视图的成本可能超出从基表获取数据的成本,或者查询过于简单,使得针对基表的查询的速度既快又容易查找。当在较小的表上定义索引视图时,经常会发生这种情况。如要强制查询处理器使用索引视图,那么可使用 NOEXPAND 提示。如果最初不通过显式的方式引用视图,这样做就可能要求重新编写查询。您可获得带有 NOEXPAND 的查询的实际成本,并将之与不引用该视图的查询计划的实际成本相比较。如果两者的成本相近,那么您就可以认定用不用索引视图都不重要。
  
  (3) 查询优化器不将查询与索引视图相匹配。重新检查视图和查询的定义,确保两者在结构上可相匹配。CASTS、converts 以及其他在逻辑上不会更改查询结果的表达式可能会阻止匹配。另外,表达式规范化和等价以及 SQL Server 执行的归入测试方面存在一些限制。可能无法显示某些等价表达式是相同的,或者逻辑上被其他表达式归入的表达式被真正归入,因此可能会错失匹配。
  
  问:我每周更新一次数据仓库。索引视图使查询速度大大提升,却降低了每周更新的速度?该怎么办呢?
  
  答:可以考虑在每周更新前丢弃索引视图,更新完后再重新创建。
  
  问:我的视图存在重复项目,而我确实想对其进行维护。该怎么办呢?
  
  答:可以考虑创建一个视图,按您所要的视图中的所有列和表达式进行分组,并添加一个 COUNT_BIG(*) 列,然后在组合的列上创建一个唯一的聚集索引。分组过程可确保唯一性。虽然不是完全相同的视图,但可以满足您的需要。
  
  问:我在一个视图上定义了另一个视图。SQL Server 不让我索引顶级视图。该怎么办呢?
  
  答:可以考虑手动将嵌套视图的定义扩展到顶级视图,然后对其进行索引(索引最低层的视图,或者不索引该视图)。
  
  问:为何一定要对索引视图定义 WITH SCHEMABINDING?
  
  答:为了
  
  使用 schemaname.objectname 明确识别视图所引用的所有对象,而不管是哪个用户访问该视图,同时
  
  不会以导致视图定义非法或强制 SQL Server 在该视图上重新创建索引的方式,更改视图定义中所引用的对象。
  
  问:为何不能在索引视图中使用 OUTER JOIN?
  
  答:当将数据插入基表时,行会在逻辑上从基于 OUTER JOIN 的索引视图上消失。这会使执行 OUTER JOIN 视图的增量更新变得相对复杂,而执行性能将比基于标准 (INNER) JOIN 的视图慢一些。

AI工作流革命:从n8n到Sora2,揭秘自动化视频创作的底层逻辑 本文深入探讨了AI工作流在自动化视频创作中的应用,重点介绍了n8n、Coze和Sora2的组合如何实现从链接输入到视频输出的全流程自动化。通过三层架构解析、关键技术模块优化及成本控制策略,这套方案显著提升了视频生产效率,适用于电商、热点追踪等多种场景。 阅读详情

相关推荐

告别仿真报错!手把手教你为Intel MAX10 FPGA定制IBIS模型(附Allegro Skill工具)

本文详细介绍了为Intel MAX10 FPGA定制IBIS模型的完整流程,解决信号完整性仿真中的管脚映射问题。通过Allegro Skill工具自动化处理管脚信息,优化IBIS模型关键段落,提升仿真效率和精度,适用于高速数字电路设计。

weixin_33217202的博客 322

该视图包含不精确或不具有确定性的转换。

给视图创建索引时,如果里面有datetime类型,在转换成字符串时,必须符合SQLServer的显式转换标准,否则会报错:该视图包含不精确或不具有确定性的转换。 Cannot create index on view "tms.dbo.v_batch_master_index". The view contains a convert that is imprecise or non-deterministic. SELECT t.product_code,t.product_name,t.batch_.

wwwluo的专栏 307

Ubuntu20.04浏览器上网慢解决方法——体验优化

一、问题描述 ubuntu上网慢的原因可能有多种: 1.主机网络慢 2.客户机下载网络占用 3.域名解析慢 本文仅代表本人配置过程,网络配置需谨慎小心 二、使用本地DNS服务器解决问题 1.安装 dnsmasq sudo apt-get install dnsmasq 2.配置dnsmasq ——终端输入: sudo gedit /etc/dnsmasq.conf ——文本中查找 : #resolv-file= ——将之替换为: resolv-file=/etc/resolv.dnsm

nofear的博客 1万+

创建索引视图

<br />引用-sql2005 联机丛书<br /> <br />在对视图创建聚集索引之前,该视图必须符合下列要求: 当执行 CREATE VIEW 语句时,ANSI_NULLS 和 QUOTED_IDENTIFIER 选项必须设置为 ON。OBJECTPROPERTY 函数通过 ExecIsAnsiNullsOn 或 ExecIsQuotedIdentOn 属性为视图报告此信息。要执行所有 CREATE TABLE 语句以创建视图引用的表,ANSI_NULLS 选项必须设置为 ON。视图不能引用任何其他

王文铮的专栏 2618

【win11+vs 2017+OpenCV4.5.5+Qt5.12配置】详细安装过程+小问题解决

由于Qt5无法与最新的vs2022兼容,扩展工具中一直显示不可用,所以将vs降级成vs2017。在安装Qt的过程中,会选择安装Qt套件,其中就的MCVS 2017,说明vs2017是与qt兼容的。当然也可以用qt creator这一原生IDE。OpenCV版本目前是最新的4.8.0,使用过程中没有什么问题,但是还是安装低版本大概率避免一些玄学问题。

qq_45306739的博客 3350

3D IC中Memory-on-Logic堆叠测试的DFT解决方案与工程实践

在半导体行业,随着摩尔定律逼近物理极限,3D IC技术通过芯片垂直堆叠实现性能提升和异构集成,已成为重要发展方向。其核心原理是利用硅通孔(TSV)或微凸块实现芯片间电气互连,将多个不同功能的芯片(如逻辑芯片与存储芯片)集成在一个封装内。这项技术的核心价值在于能大幅提升系统性能、降低功耗并实现更小的封装尺寸。然而,芯片堆叠后,传统的测试方法面临巨大挑战,尤其是测试访问存在物理屏障,无法直接探测被覆盖的芯片接口。为此,可测试性设计(DFT)成为确保3D IC可靠性与量产可行性的关键技术。它通过在设计阶段植入专用

weixin_42521058的博客 631

创建索引

Transact-SQL 参考CREATE INDEX为给定表或视图创建索引。只有表或视图的所有者才能为表创建索引。表或视图的所有者可以随时创建索引,无论表中是否有数据。可以通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。语法CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_nam

脑瓜子的程序人生 1419

SAR成像处理基本知识2——图像尺寸与回波尺寸的关系

阅读本文前,请先了解上一篇文章(SAR成像处理基本知识1——常用专用名词解释) 1. SAR图像尺寸预估方法 以C波段2m@20km的SAR图像为例,假设天线中心下视角为35° ,说明图像尺寸的估计方法。 1.1 距离向尺寸估计 地距分辨率为2m时,距离向分辨率约为1.15m,则要求信号带宽不小于130MHz,假设信号带宽为150MHz,采样率为180MHz,那么距离向分辨单元为0.833m。 地距幅宽为20km时,距离向幅宽约为20*sind(3...

爱学习的小伟的博客 4954

通过 SQL Server 2005 索引视图提高性能

撰稿人:Eric Hanson投稿人:Gail Erickson、Lubor Kollar、Jason Ward摘要:本文档介绍了 SQL Server 2005 Enterprise Edition 中经过改进的索引视图功能。文中对索引视图进行了说明介绍,并讨论了可通过该功能改善性能的一些具体情况。 本页内容 什么是索引视图?  应用索引视图的优点  SQL Server 2005

wooley的专栏 1414

向华为学习——解读158页 华为敏捷园区网技术解决方案【附全文阅读】

华为敏捷园区网解决方案通过策略随行和体验随身技术,满足移动办公场景下的网络需求。该方案采用敏捷交换机和防火墙自动执行策略配置,实现用户身份认证与业务策略的无缝衔接,且策略配置与IP地址解耦,简化了管理流程。相比传统技术,该方案有效解决了用户分级、QoS保障、无线接入等关键问题,确保用户在移动过程中获得一致的网络体验。

cdfunlove的博客 379

【软件系统架构】系列六: SysML(系统建模语言)

SysML(系统建模语言)是OMG组织基于UML扩展的专用建模语言,用于支持复杂系统全生命周期建模。它包含9类标准图,核心建模元素包括块(Block)、端口接口、需求和约束等。与UML相比,SysML更适用于软硬件结合的复杂系统建模。作为MBSE的核心工具,SysML通过结构图、行为图、需求图和参数图实现系统设计、需求追踪和性能验证。虽然面临学习门槛高、工具成本高等挑战,但随着AI融合和国产化替代趋势,SysML在航空航天、汽车电子等领域的应用日益广泛。SysML v2将简化语法并提升互操作性,推动系统工程

moton2017的博客 2385

SQLServer之创建索引视图

索引视图创建注意事项 对视图创建的第一个索引必须是唯一聚集索引。创建唯一聚集索引后,可以创建更多非聚集索引。为视图创建唯一聚集索引可以提高查询性能,因为视图在数据库中的存储方式与具有聚集索引的表的存储方式相同。查询优化器可使用索引视图加快执行查询的速度。要使优化器考虑将该视图作为替换,并不需要在查询中引用该视图。 索引视图中列的large_value_types_out_of_row...

weixin_30378311的博客 1547

大语言模型原理与工程实践:行业大语言模型的评测:以金融行业大语言模型为例

大语言模型、金融行业、模型评测、自然语言处理、深度学习、Transformer、BERT、GPT 1. 背景介绍 近年来,大语言模型(Large Language Model,LLM)在自然语言处理(Natural Language Processing,NLP)领域取得了突破性的进

AI大模型应用之禅 136

通过 SQL Server 2005 索引视图提高性能---全面介绍索引视图

通过 SQL Server 2005 索引视图提高性能发布日期: 2005年04月18日撰稿人:Eric Hanson投稿人:Gail Erickson、Lubor Kollar、Jason Ward摘要:本文档介绍了 SQL Server 2005 Enterprise Edition 中经过改进的索引视图功能。文中对索引视图进行了说明介绍,并讨论了可通过该功能改善性能的一些具体

thunder09的专栏--没事就写点儿 1553

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

用SQL Server 2005索引视图提高性能一(图)

一、索引视图    多年以来,MicrosoftSQL Server一直支持创建称为视图的虚拟表。通常,这些视图的主要作用是:    提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中。    提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式。    通过 SQL Server 2000,SQL Server 视图的功能得到了扩展,实现了系统性能方面的收益。可

jackfor001的专栏 641

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

用SQL Server 2005索引视图提高性能一

 一、索引视图   多年以来,MicrosoftSQL Server一直支持创建称为视图的虚拟表。通常,这些视图的主要作用是:   提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中。   提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式。   通过 SQL Server 2000,SQL Server 视图的功能得到了扩展,实现了系统性能...

aitanwu4387的博客 148

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

在SQL Server中用索引视图查看性能状况

在SQL Server中,视图是一个保存的T-SQL查询。视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全。但是,它并不占用数据库的任何空间。实际上,在你查询它之前,视图并不做任何事情。索引视图在SQL Server 2000和2005中,你能够给视图增加索引。但是,如果视图只是一个保存在数据库中的查询定义,在运行前没有自己的数据,你如何给那个定义建立

运 522

利用动态管理视图提高SQL Server索引效率

 就如同数据库DBA了解的一样,合适的索引能够提高查询性能和应用程序可测量性。但是每个附加的索引,都给系统增加了额外开销,因为随着数据从表和视图中不断增加、修改或清除,SQL Server需要维护这些索引。  之前,我介绍了一下动态管理视图(DMV)。它是一种很有用的监控和解决SQL Server故障的工具。本文是它的续篇,我将继续和大家一起探讨其他的一些数据库管理员用来能够测定现存索引效率的

884

SQL Server 2005 显示索引碎片

 在SQL Server 2000中,使用DBCC SHOWCONTIG命令来显示索引碎片。碎片是表中数据修改自然产生的副产品。当在数据库中更新数据时,索引(基于索引键)的逻辑顺序不和实际数据页的物理顺序同步了。当数据页变得越来越无序,为了返回查询请求的结果,需要更多的I/O操作。重新生成或重新组织一个索引允许通过同步逻辑索引顺序、重排列物理数据页去匹配逻辑索引顺序,来整理索引的碎片。

jackfor001的专栏 2080

SQL Server 2005 中的分区表和索引原理

<br />      摘要 :SQL Server 2005 中基于表的分区功能为简化分区表的创建和维护过程提供了灵活性和更好的性能。追溯从逻辑分区表和手动分区表的功能到最新分区功能的发展历程,探索为什么、 何时以及如何使用 SQL Server 2005 设计、实现和维护分区表。为什么要进行分区? <br />  什么是分区?为什么要使用分区?简单的回答是:为了改善大型表以及具有各种访问模式的表的可伸缩性和可管理性。通常,创建表是为了存储某种实体 (例如客户或销售)的信息,并且每个表只具有描

dearbinge的专栏 2679

在sql server 2005里,根据数据库性能动态构建索引。

在sql server 2005里,根据数据库性能动态构建索引。数据库设计好后,系统上线运动一个周期后,数据库性能瓶颈突现出来,这个时间,需要一种根据性能,来动态构建索引,提高查询效率。以下为SQL 原码。-- 添加 IX_AutoIndex_ 系列索引    /*    --过程优化SQL    SELECT   [RowNumber] =  row_number() over (order b

skyren的专栏 942

在SQL-server2005中如何对运行慢的查询进行分析?

<br /><br />------  问题的提出:<br />     在SQL-server2005中如何对运行慢的查询进行分析?<br />    引起查询或更新的执行时间超过预期时间的原因有多种。查询运行慢,可能是由与运行 SQL Server 的网络或计算机相关的性能问题引起的,也可能是由物理数据库设计问题引起的。<br />查询和更新运行慢的最常见原因有:<br />·        网络通讯速度慢。<br />·        服务器的内存不足,或者没有足够的内存供 SQL Server

学无止境 4357

物化视图 sql server

 物化视图,所谓视图实际上是不存储物理信息的(同表相区别,表存储实际的数据和表的索引信息等。),视图仅仅存储  一个select语句而已。而物化视图就要视图也存储实际的数据,这种实际数据,就是索引。oracle   8imssqlserver2000中引入的。比如oracle的函数索引和sqlserver2000的索引视图都是物化视图。原因是这种视图能够显著提高性能,举个例子     一个表:  ...

蜜蜂的专栏 1107
上一篇: 用SQL Server 2005索引视图提高性能一(图)
下一篇: SQL Server2005整合服务: 性能优化技术
jackfor001
博客等级 码龄22年 41粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值