随笔分类 - SQL优化
摘要:1、统计相应字段的数据情况(如:几年没更新,无数据等情况) 2、确认产品逻辑已无效(产品经理邮件确认) 3、数据备份 4、将数据清空(置为0或空) 5、测试环境中删除引用页面 6、修改定时程序,存储过程 7、测试通过后发布 8、删除约束,重建索引,如有视图依赖也需要删除 9、删除字段 注:4、5、6
阅读全文
摘要:WHY? IN 和 NOT IN 是比较常用的关键字,为什么要尽量避免呢? 1、效率低 可以参看我之前遇到的一个例子([小问题笔记(九)] SQL语句Not IN 效率低,用 NOT EXISTS试试) 2、容易出现问题,或查询结果有误 (不能更严重的缺点) 以 IN 为例。建两个表:test1 和
阅读全文
摘要:一、什么情况下需要重建索引 1、碎片过多(参考值:>20%) 索引碎片如何产生,请移步至《 T-SQL查询高级—SQL Server索引中的碎片和填充因子》 2、填充度过低(参考值:<75%) 导致填充度过低的可能原因:①.有删除 ②.有分区表 ③.聚集索引不是数字 ④.数据百万以内,比较少 二、重
阅读全文
摘要:1、查询CPU开销大的语句 SELECT top 100 total_worker_time/execution_count AS avg_cpu_cost, plan_handle, execution_count, (SELECT SUBSTRING(text, statement_start_
阅读全文
摘要:第一步 DBCC DROPCLEANBUFFERS 清除缓冲区 DBCC FREEPROCCACHE 删除计划高速缓存中的元素 从缓冲池中删除所有清除缓冲区。要求具有 sysadmin 固定服务器角色的成员身份。 第二步 SET STATISTICS TIME ON SET STATISTICS I
阅读全文
摘要:(自己总结,有误请不吝赐教)1、如果触发频率高,占用内存,降低数据访问速度2、相对不灵活,一旦触发马上执行,不能排除特殊情况3、一定程度上打乱代码结构,相关的代码都需要特别注释,否则造成阅读和维护上的困难4、过度使用也会造成数据库的维护困难所以,那些非常重要,对正确性、安全性特别敏感的数据,再考虑添...
阅读全文
摘要:起因是如此简单的一句sqlDELETE FROM tablename WHERE timekey=20150416提示:Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。提供几种解决思路:1、检查WHERE条件中字段是否已建索引2、检查是否被其他表引用,引用表外键字段上是否已建索...
阅读全文
摘要:写法:假装有个表Shop,其中有一列ShopName,取100000到100050条数据。ROW_NUMBER 的写法SELECT * FROM(SELECT ShopName , ROW_NUMBER() OVER(ORDER BY ShopName) as RFROM Shop) tWHERE...
阅读全文
摘要:一个字段里面有一些数据是NULL是很讨厌的,写查询麻烦不说,最重要的is null 或者is not null都是不能命中索引的,会导致全表扫描啊。 所以对于一个已经存在NULL的字段,有时间的话最好改造改造。 方法1、为字段添加默认值约束,更新现有NULL值。 此方法简单粗暴,容易引起锁,线上数据
阅读全文
摘要:项目中遇到这么个情况:t1表 和 t2表 都是150w条数据,600M的样子,都不算大。但是这样一句查询 ↓select * from t1 where phone not in (select phone from t2)直接就把我跑傻了。。。十几分钟,检查了一下 phone在两个表都建了索引,字...
阅读全文
摘要:铺垫知识点:数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘。既键值的逻辑顺序决定了表中相应行的物理顺序多数情况下,数据库读取频率远高于写入频率,索引的存在 为了读取速度牺牲写入速度页 为最小单位 8kb区物理连续的页(8页)的集合内部碎片 数据库页内部产生的碎片,外部反之碎片...
阅读全文