学习SQL语句性能调整

有些法式员在撰写数据库使用法式时,常专注于 OOP 及各类 framework 的利用,却忽略了根基的 SQL 语句及其「机能 (performance) 优化」问题。曾听过台湾某半导体大厂的新历程序员,所组出来的一段 PL/SQL 跑了好几分钟还跑不完;想当然,即便他的 AJAX 及 ooxx 框架用得再标致,系统机能也会让利用者无法忍耐。以下是拾掇出的一些数据库规划、SQL performance tuning 简单心得,让长年研究AJAX、一堆高深 ooxx framework,却无暇研究 SQL statement 的法式员,透过最短时间对本文的阅读,能避免踩到一些 SQL 的机能地雷。

Primary Key 字段的长度尽量小,能用 small integer 就不要用 integer。例如员工数据表,若能用员工编号当主键,就不要用成分证号码。

文字数据字段若长度不固定,如:地址,则该用 varchar 或 nvarchar。除了可节流存储空间外,存取硬盘时也会较无效率。

设想字段时,若其值无关紧要,最好也给一个默认值,并设成「不答应 NULL」(一般字段默认为「答应 NULL」)。由于 SQL Server 在存放和查询有 NULL 的数据表时,会破费额外的运算动作 [2]。

若一个数据表的字段过多,应垂直切割成两个以上的数据表,并可用同名的 Primary Key 一对多保持起来,如:Northwind 的 Orders、Order Details 数据表。以避免在存取数据时,以「集簇索引 (clustered index)」扫描时会加载过多的数据,或点窜数据时形成互相锁定或锁定过久。

替常被查询或排序的字段成立索引,如:常被看成 WHERE 子句前提的字段。

用来成立索引的字段,长度不宜过长,不要用跨越 20 个 Byte 的字段,如:地址。

不要替内容反复性高的字段成立索引,如:性别;反之,若反复性低的字段则适合成立索引,如:姓名。

不宜替过多字段成立索引,不然反而会影响到「INSERT、UPDATE、DELETE」的机能,特别是以「OLTP (联机事务处置;在线买卖)」为主的网站数据库。

若数据表存放的数据很少,就不必锐意成立索引。不然可能数据库沿着存放索引的「树状布局」(Balanced Tree) 去搜索索引中的数据,反而比扫描整个数据表还慢。

若查询时合适前提的数据良多,则透过「非集簇索引 (non-clustered index)」搜索的机能,反而 可能不如整个数据表逐笔扫描。

成立「集簇索引」的字段选择至为主要,会影响到整个索引布局的机能。要用来成立「集簇索引」的字段,务必选择「整数」类型 (键值会较小)、独一、不成为 NULL。

有些册本会提到,利用「LIKE、%」做恍惚查询时,即便您已替某个字段成立索引 (如下方代码的 CustomerID 字段),但以常量字符开首才会利用到索引,若以万用字符 (%) 开首则不会利用索引,如下所示:

学习SQL语句性能调整 1

学习SQL语句性能调整 2
User Review
0 (0 votes)
本站最新优惠

Namesilo优惠:新用户省 $1 域名注册-优惠码:45D%UYTcxYuCloZ 国外最便宜域名!点击了解更多

特别优惠:免费赠送 $100 Vultr主机-限时优惠!英文站必备海外服务器!点击了解更多

VPS优惠:搬瓦工优惠码:BWH3OGRI2BMW 最高省5.83%打开外面世界的一款主机点击了解更多

原创文章,作者:江小编,如若转载,请注明出处:https://jhrs.com/2018/22260.html

扫码关注【江湖人士】公众号,您会获得关于国外被动收入的最新资讯

WA付费会员QQ群:387027533,加这个群需要回答您的WA会员名,待核实后予以通过

普通QQ交流群:178758794,可分享交流建站的各类经验和知识

发表评论

电子邮件地址不会被公开。 必填项已用*标注

17 − 5 =