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