Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server索引提示_Sql_Sql Server 2008_Indexing - Fatal编程技术网

Sql server索引提示

Sql server索引提示,sql,sql-server-2008,indexing,Sql,Sql Server 2008,Indexing,在过去的两天里,我一直在阅读有关索引和如何优化数据库的内容 尽管我对索引有一个清晰的概念,但我还不知道如何实际优化我的数据库 你能推荐一些优化数据库的教程或技术吗 请具体一点,因为我已经读了很多理论,但到目前为止还没有具体的指导 谢谢如果它“没有”坏,就不要修理它。查找应用程序中速度较慢的区域,找到有问题的查询,分析这些查询计划,并解决索引问题(如果有)。不要因为你刚刚学到了一些东西就开始改变你的系统 进一步阅读: 尝试此查询以查找缺少的索引: --based on http://stackov

在过去的两天里,我一直在阅读有关索引和如何优化数据库的内容

尽管我对索引有一个清晰的概念,但我还不知道如何实际优化我的数据库

你能推荐一些优化数据库的教程或技术吗

请具体一点,因为我已经读了很多理论,但到目前为止还没有具体的指导

谢谢

如果它“没有”坏,就不要修理它。查找应用程序中速度较慢的区域,找到有问题的查询,分析这些查询计划,并解决索引问题(如果有)。不要因为你刚刚学到了一些东西就开始改变你的系统

进一步阅读:

尝试此查询以查找缺少的索引:

--based on http://stackoverflow.com/questions/1540192/searching-for-table-index-scans
--this query will show cahced query plans that "SCAN", change comments for other things

;WITH XMLNAMESPACES(DEFAULT N'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
, CachedPlans AS
(SELECT
     RelOp.op.value(N'../../@NodeId', N'int') AS ParentOperationID
         ,RelOp.op.value(N'@NodeId', N'int') AS OperationID
         ,RelOp.op.value(N'@PhysicalOp', N'varchar(50)') AS PhysicalOperator
         ,RelOp.op.value(N'@LogicalOp', N'varchar(50)') AS LogicalOperator
         ,RelOp.op.value(N'@EstimatedTotalSubtreeCost ', N'float') AS EstimatedCost
         ,RelOp.op.value(N'@EstimateIO', N'float') AS EstimatedIO
         ,RelOp.op.value(N'@EstimateCPU', N'float') AS EstimatedCPU
         ,RelOp.op.value(N'@EstimateRows', N'float') AS EstimatedRows
         ,cp.plan_handle AS PlanHandle
         ,qp.query_plan AS QueryPlan
         ,st.TEXT AS QueryText
         ,cp.cacheobjtype AS CacheObjectType
         ,cp.objtype AS ObjectType
         ,cp.usecounts AS UseCounts
     FROM sys.dm_exec_cached_plans                            cp
         CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle)     st
         CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle)   qp
         CROSS APPLY qp.query_plan.nodes(N'//RelOp')          RelOp (op)
)
SELECT
    PlanHandle
        ,ParentOperationID
        ,OperationID
        ,PhysicalOperator
        ,LogicalOperator
        ,UseCounts
        ,CacheObjectType
        ,ObjectType
        ,EstimatedCost
        ,EstimatedIO
        ,EstimatedCPU
        ,EstimatedRows
        ,QueryText
    FROM CachedPlans
    WHERE CacheObjectType = N'Compiled Plan'
        AND PhysicalOperator IN ('nothing will ever match this one!'
                                --,'Assert'                             
                                --,'Bitmap'
                                --,'Clustered Index Delete'
                                --,'Clustered Index Insert'
                                ,'Clustered Index Scan'
                                --,'Clustered Index Seek'
                                --,'Clustered Index Update'
                                --,'Compute Scalar'
                                --,'Concatenation'
                                --,'Constant Scan'
                                ,'Deleted Scan'
                                --,'Filter'
                                --,'Hash Match'
                                ,'Index Scan'
                                --,'Index Seek'
                                --,'Index Spool'
                                ,'Inserted Scan'
                                --,'Merge Join'
                                --,'Nested Loops'
                                --,'Parallelism'
                                ,'Parameter Table Scan'
                                --,'RID Lookup'
                                --,'Segment'
                                --,'Sequence Project'
                                --,'Sort'
                                --,'Stream Aggregate'
                                --,'Table Delete'
                                --,'Table Insert'
                                ,'Table Scan'
                                --,'Table Spool'
                                --,'Table Update'
                                --,'Table-valued function'
                                --,'Top'
                                )
或者这个:

SELECT TOP 50
    total_worker_time/execution_count AS Avg_CPU_Time
        ,execution_count
        ,total_elapsed_time/execution_count as AVG_Run_Time
        ,(SELECT
              SUBSTRING(text,statement_start_offset/2,(CASE
                                                           WHEN statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), text)) * 2 
                                                           ELSE statement_end_offset 
                                                       END -statement_start_offset)/2
                       ) FROM sys.dm_exec_sql_text(sql_handle)
         ) AS query_text 
FROM sys.dm_exec_query_stats 
ORDER BY 3 DESC

用于分析SQL Server性能的最大也是最重要的工具之一是SQL Profiler。它并不容易理解和使用,因此本系列视频可能会帮助您了解如何使用SQL Profiler来帮助您调整SQL Server性能。

首先要了解的最关键的内容是: 外键(它们不是自动索引的,通常用于联接,因此通常应该索引,除非表大小很小并且将保持很小。)FK通常需要索引

where子句中有足够的变量使索引有用的东西。例如,where子句中使用的last_name可能需要索引,但仅包含“Y”或“N”文本的字段不会从中受益。 你经常点的东西

如果where或order by中只有一个查询使用该特定字段,则除非查询时间过长,否则不要编制索引

不需要索引的内容: 文本或varchar(Max)或通常由“%text%”等搜索的大型字段。与常规索引相比,全文索引可能会使它们受益更多

位字段。对位字段进行索引是没有意义的(并非所有数据库都允许索引),因为它没有足够的变量来充分利用索引

请记住,每个索引都会增加插入、更新或删除的时间。虽然我注意到用户通常会容忍更多的时间来做这些事情,而不是从select返回结果,但必须记住这一点。

一些收藏夹:

  • 从 SQLServerPedia
  • 来自SQL 服务器MVP盖尔·肖
  • 格兰特·弗里奇。 理解执行计划将 成为优化代码的关键部分。 这是最好的SQL Server之一 我读过的书是免费的

  • 查询具体做什么?第一个查询查看所有包含“扫描”的cahced查询计划,扫描通常表示未使用索引。您可以在“查找其他内容的位置”中更改注释。第二个查询返回运行最慢的查询。