zoukankan      html  css  js  c++  java
  • 数据库字段数据类型对索引的影响

      这两天做一个数据更新工作,并把它做成每天定时任务。差不多有每天有个7w的量。写完后,一运行,总是遇见CPU爆满的情况,如下图。

      

         
      接下来就开始查找原因,首先检查了一下,哪些语句使用CPU较高。

      

    SELECT TOP 10 TEXT AS 'SQL Statement'
        ,last_execution_time AS 'Last Execution Time'
        ,(total_logical_reads + total_physical_reads + total_logical_writes) / execution_count AS [Average IO]
        ,(total_worker_time / execution_count) / 1000000.0 AS [Average CPU Time (sec)]
        ,(total_elapsed_time / execution_count) / 1000000.0 AS [Average Elapsed Time (sec)]
        ,execution_count AS "Execution Count",qs.total_physical_reads,qs.total_logical_writes
        ,qp.query_plan AS "Query Plan"
    FROM sys.dm_exec_query_stats qs
    CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
    CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
    ORDER BY total_elapsed_time / execution_count DESC

      

      但是分析了一下, 我已经对查询的字段加上了索引,但是好像不起作用啊 。

      

      最终发现是这个样子的,我在声明变量@Member的时候,用的是bigint,而原来的数据库中的字段是nvarchr。

      

      之后,我把@Member的字段的类型也改成了nvarchar,再执行,cpu一下子降了下来。

      

      结论

         当SQL 传递参数与表索引字段类型不一致的时候,数据库将自动进行数据类型转换,这时就不会使用到索引,而是使用全表扫描,从而导致了CPU 和I/O 都开销很大,今天又算印证这个真理了。

     

  • 相关阅读:
    题解 POJ1149 Pigs
    题解 【网络流24题】运输问题
    题解 【网络流24题】太空飞行计划
    题解 【网络流24题】方格取数问题
    题解 密码锁
    题解 【重庆八中模拟赛】寻找代表元
    题解 [SHOI2010]最小生成树
    题解 【ZJOI2009】 假期的宿舍
    题解 [ZJOI2008]树的统计Count
    JSP页面中的pageEncoding和contentType两种属性(转)
  • 原文地址:https://www.cnblogs.com/sdadx/p/6510213.html
Copyright © 2011-2022 走看看