还剩2页未读,继续阅读
文本内容:
分享SQL语句书写规范书写风格.语句关键字应全部使用小写.引用字符时应使用单引号如updatetestablesetidcol=abed
0.连接符或运算符or、in、and、=、<=、>=+-等前后宜加上一个空格否则容易导致以下类似问题例如在语句selecta-bfromtable中,ab均为变量,拼写该语句时,如果a=6b=-3则语句变为select6-3fromtableo--被视为SQL的注释结果语句报错.不得使用select*from...语法必须标明字段名即selectcollcol
2...fromtableawhere....严禁使用insertintotable_namevalues5语法统一使用insertintotable_namecollcol2values“o.SQL语句包含多表连接时,必须加上表的别名,对每个字段的使用都要带上表别名selecta.col1a.col2b.col3fromtableaatablebbwherea.col4=b.col
5.应避免显式或隐含的类型转换例如在where子句中numeric型和int型的列的比较.在子查询中前后必须加上括号selectcollco!2fromtableawherecol3inselectcol4fromtablebwherecol
40.执行SQL时一次应只执行一条如果多条语句则应分开执行,但必须保持在一个事务中不得一次执行通过分号等分开的多条语句,这样处理不清晰.如果能采用or代替则不宜使用in语句in语句中的元素不得超过500个,如果超过,则应拆分为多条SQL语句严禁使用xxin….orxxin.or连接条件不得超过500超过时应拆分为多条语句性能优化.查询时应尽量减少多余数据的读取,通过使用where子句来减少返回的记录数.如果在语句中有notinin操作,应尽量用notexistsexists来代替特别对大数据量的两者检索速度有很明显的区别.不宜使用外连接外连接效率低.一条SQL语句中不宜使用3层以上的嵌套查询如果超过,则应在Java等应用服务器程序中处理.一条SQL语句中不得从4个及以上表中同时取数仅作关联或过滤条件而不涉及取数的表不参与表个数计算;如果必须关联4个或4个以上表,应在Java等应用服务器程序中处理.应尽量避免使用orderby和groupby排序操作,如必须使用排序操作,尽量建立在有索引的列上因为大量的排序操作影响系统性能.对索引列的比较,应尽量避免使用not或!二,可拆分为几个条件因为not和〃!二〃不会使用索引如coll是索引列,条件coll!=0可以拆分为coll0orcol20o.应尽量将数据库函数、计算表达式写在逻辑操作符右边因为这些对列的操作会将导致表扫描,影响性能.在where子句中如果有多个过滤条件,应将索引列或过滤记录数最多的条件放在前面.能用连接方式实现的功能不得用子查询例如:selectnamefromcustomerwherecustomerldin(selectcustomerldfromorderwheremoney1000)o应该用如下语句代替selectnamefromcustomerinnerjoinorderoncustomer.customerld=order.customerldwhereorder.money100o或selectnamefromcustomerwhereexists(select1fromorderwheremoney1000andcustomer.customerld=order.customerld)〈这里需要注意使用exists的效率依赖于匹配度,innerjoin效率比较稳定.多表关联查询时,写法可遵循以下原则,这样做有利于建立索引,提高查询效率格式如下:selectsum(tlje)fromtableltltable2t2table3t3where(tl的等值条件(=))and(tl的非等值条件)and(t2与tl的关联条件)and(t2的等值条件)and(t2的非等值条件)and(t3与t2的关联条件)and(t3的等值条件)and(t3的非等值条件)跨数据库支持对于跨数据库Java应用程序的VO映射数据库的数据格式建议:1)整型字段字段设置保存为Integer或者Long2)数字型字段若需要使用小数2位以上的精确计算,读取、插入、更新使用BigDecimal类型3)字符型字段读取为String并保存为String插入或者更新为String4)时间字段读取为String插入或者更新时的时间格式使用中间件统一处理字符串连接应使用符号,而不应使用++是SQLServer语法,Oracle和DB2支持,Hibernate转化为SQLServer时,会自动将||转为通配符不能使用1a-c]%这种形式应写成如:selectcollcol2fromtable_namewherecolllike[a]%ORcolllike[b]%ORcolllike[c]%截取字符串长度函数应使用substr起始位置为1表示从头开始因为db2中substr起点为10会报错;在SqIServer数据库中使用的是substring需要进行转换不得通过selectpercentn和selecttopn限制查询结果集的记录数join与on必须严格匹配,严禁出现没有on的joinojoin...on后面不宜使用or如果使用则需将or的范围用()括起来不得使用selectinto的格式Selectinto是SQLServer特有语法因为Oracle和DB2不支持应将Null值与空字符串(长度为零的字符串)视为不同虽然Oracle视Null与空字符串为相同,但DB2和SQLServer却视为不同。