网站大量收购独家精品文档,联系QQ:2885784924

《数据库优化方法.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《数据库优化方法

SQL数据库优化方法 目录 1 系统优化介绍 1 2 外围优化 1 3 SQL优化 2 3.1 注释使用 2 3.2 对于事务的使用 2 3.3 对于与数据库的交互 2 3.4 对于SELECT *这样的语句, 2 3.5 尽量避免使用游标 2 3.6 尽量使用count(1) 3 3.7 IN和EXISTS 3 3.8 注意表之间连接的数据类型 3 3.9 尽量少用视图 3 3.10 没有必要时不要用DISTINCT和ORDER BY 3 3.11 避免相关子查询 3 3.12 代码离数据越近越好 3 3.13 插入大的二进制值到Image列 4 3.14 Between在某些时候比IN 速度更快 4 3.15 对Where条件字段修饰字段移到右边 4 3.16 在海量查询时尽量少用格式转换。 4 3.17 IS NULL 与 IS NOT NULL 4 3.18 建立临时表, 4 3.19 Where中索引的使用 5 3.20 外键关联的列应该建立索引 5 3.21 注意UNion和`UNion all 的区别 5 3.22 Insert 5 3.23 order by语句 5 3.24 技巧用例 6 3.24.1 Sql语句执行时间测试 6 系统优化介绍 在我们的项目中,由于客户的使用时间较长或客户的数据量大,造成系统运行速度慢,系统性能下降就容易造成数据库阻塞。这是个非常痛苦的事情,用户的查询、新增、修改等需要花很多时间,甚至造成系统死机的现象。速度慢的原因主要是来自于资源不足。 数据库的优化通常可以通过对网络、硬件、操作系统、数据库参数和应用程序的优化来进行。最常见的优化手段就是对硬件的升级。根据统计,对网络、硬件、操作系统、数据库参数进行优化所获得的性能提升,全部加起来只占数据库系统性能提升的40%左右其余系统性能提升来自对应用程序的优化。一个数据库系统的生命周期可以分成:设计、开发和成品三个阶段。在设计阶段进行数据库性能优化的成本最低,收益最大。在成品阶段进行数据库性能优化的成本最高,收益最小。升级硬件量避免使用游标如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。量使用count(1)count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。IN和EXISTS? EXISTS要远比IN的效率高。里面关系到full table scan和range scan。几乎将所有的IN操作符子查询改写为使用EXISTS的子查询。 注意表之间连接的数据类型避免不同类型数据之间的连接。 避免相关子查询一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。在海量查询时尽量少用格式转换。IS NULL 与 IS NOT NULL? 不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。Where中索引的使用 WHERE条件顺序尽量把索引字段放在前面(主键的唯一性最高),复合索引字段顺序与where条件顺序保持一致。Sql自动查找使用那个索引。 外键关联的列应该建立索引 (如子表id)主子表单据肯定要建视图,2个表的关联以2个表中的MainID为关系,所以,需要给子表的MainID单独建索引,这将很大地提高视图的速度。例如Gy_InOutSub中的InoutMainid增加索引。 注意UNion和UNion all 的区别UNION all执行效率高。 Insert Insert into 表 values() 应该为 Insert into 表 (字段) values() order by语句 ORDER BY语句决定了如何将返回的查询结果排序。Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。 仔细检查order by语句以找出非索引项或者表达式,它们会降低性能。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by子句中使用表达式。 技巧用例 Sql

文档评论(0)

wu12youli + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档