博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库字段数据类型对索引的影响
阅读量:4575 次
发布时间:2019-06-08

本文共 1081 字,大约阅读时间需要 3 分钟。

  这两天做一个数据更新工作,并把它做成每天定时任务。差不多有每天有个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 qsCROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) stCROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qpORDER BY total_elapsed_time / execution_count DESC

 

  

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

  

 

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

  

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

  

  结论

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

 

 

 

 

 

转载于:https://www.cnblogs.com/sdadx/p/6510213.html

你可能感兴趣的文章
关于 Failed to establish a new connection: [Errno 11004] getaddrinfo failed',))的问题
查看>>
JavaScript中严格判断NaN
查看>>
json_encode不自动转义斜杠“/”的方法
查看>>
CentOS 7安装PHP依赖管理Composer以及指定PHP版本使用Composer
查看>>
循序渐进大型网站架构
查看>>
Nodejs+Express 搭建 web应用
查看>>
2013春节出游兴“专机游”
查看>>
mysql 创建用户名及密码
查看>>
五 搭建kafka集群
查看>>
Linux 内核即插即用规范
查看>>
【规范】javascript 变量命名规则
查看>>
数据适配 DataAdapter对象
查看>>
有序列表ol和定义列表dl,dt,dd
查看>>
联想小新Air 15 安装黑苹果macOS High Sierra 10.13.6过程
查看>>
公共POI导出Excel方法–java
查看>>
次短路——Dijkstra
查看>>
C++ compile issue
查看>>
安卓中的shape
查看>>
站立会议总结08
查看>>
C++ stat判断路径是文件还是目录
查看>>