SQL語句規範總結
SQL結構化查詢字串的改寫,是實現資料庫查詢效能提升的最現實、最有效的手段,有時甚至是唯一的手段,比如在不允許大幅度修改現有資料庫結構的情況下。 |
1. 語句關鍵字應全部使用小寫。
2. 引用字元時應使用單引號。如:update testable set idcol=’abcd’。
3. 連線符或運算子or、in、and、=、<=、>=, +,- 等前後宜加上一個空格。否則容易導致以下類似問題。例如在語句select a–b from table中,a,b均為變數,拼寫該語句時,如果a = 6,b = -3,則語句變為select 6--3 from table。--被視為SQL的註釋,結果語句報錯。
4. 不得使用“select * from …”語法,必須標明欄位名。即select col1, col2,… from tablea where …
5. 嚴禁使用“insert into table_name values (?,?,……)”語法,統一使用“insert into table_name (col1,col2,……) values (?,?,…...)”。
6. SQL語句包含多表連線時,必須加上表的別名,對每個欄位的使用都要帶上表別名。
select a.col1, a.col2, b.col3 from tablea a, tableb b where a.col4=b.col5
7. 應避免顯式或隱含的型別轉換。例如在where子句中numeric型和int型的列的比較。
8. 在子查詢中前後必須加上括號。
select col1, col2 from tablea where col3 in ( select col4 from tableb where col4>0)
9. 執行SQL時一次應只執行一條,如果多條語句則應分開執行,但必須保持在一個事務中。不得一次執行通過分號等分開的多條語句,這樣處理不清晰。
10. 如果能採用or代替,則不宜使用in 語句。in語句中的元素不得超過500個,如果超過,則應拆分為多條SQL語句。嚴禁使用xx in(‘’,’’….) or xx in(‘’,’’,’’)。
11. or連線條件不得超過 500,超過時應拆分為多條語句。
1. 查詢時應儘量減少多餘資料的讀取,通過使用where子句來減少返回的記錄數。
2. 如果在語句中有not in(in)操作,應儘量用not exists(exists)來代替。特別對大資料量的兩者檢索速度有很明顯的區別。
3. 不宜使用外連線。外連線效率低。
4. 一條SQL語句中不宜使用3層以上的巢狀查詢。如果超過,則應在Java等應用伺服器程式中處理。
5. 一條SQL語句中不得從4個及以上表中同時取數。僅作關聯或過濾條件而不涉及取數的表不參與表個數計算;如果必須關聯4個或4個以上表,應在Java等應用伺服器程式中處理。
6. 應儘量避免使用order by和group by排序操作,如必須使用排序操作,儘量建立在有索引的列上。因為大量的排序操作影響系統效能。
7. 對索引列的比較,應儘量避免使用not 或 !=,可拆分為幾個條件。因為“not”和“!=”不會使用索引。如col1 是索引列,條件col1 !=0 可以拆分為col1 >0 or col2 <0。
8. 應儘量將資料庫函式、計算表示式寫在邏輯操作符右邊。因為這些對列的操作會將導致表掃描,影響效能。
9. 在where子句中,如果有多個過濾條件,應將索引列或過濾記錄數最多的條件放在前面。
10. 能用連線方式實現的功能,不得用子查詢。例如:select name from customer where customerId in ( select customerId from order where money > 1000)。 應該用如下語句代替:select name from customer inner join order on customer.customerId = order.customerId where order.money > 100。或 select name from customer where exists ( select 1 from order where money > 1000 and customer.customerId = order.customerId) <這裡需要注意:使用exists的效率依賴於匹配度,inner join效率比較穩定>
11. 多表關聯查詢時,寫法可遵循以下原則,這樣做有利於建立索引,提高查詢效率。格式如下:select sum (t1.je) from table1 t1, table2 t2, table3 t3 where (t1的等值條件(=)) and (t1的非等值條件) and (t2與t1的關聯條件) and (t2的等值條件) and (t2的非等值條件) and (t3與t2的關聯條件) and (t3的等值條件) and (t3的非等值條件)。
1. 對於跨資料庫Java應用程式的VO對映資料庫的資料格式建議:
1) 整型欄位:欄位設定儲存為Integer或者Long
2) 數字型欄位:若需要使用小數2位以上的精確計算,讀取、插入、更新使用BigDecimal型別
3) 字元型欄位:讀取為String,並儲存為String,插入或者更新為String 4) 時間欄位:讀取為String,插入或者更新時的時間格式使用中介軟體統一處理。
2. 字串連線應使用“||”符號,而不應使用“+”。“+”是SQLServer語法,Oracle和DB2支援“||”,Hibernate轉化為SQLServer時,會自動將“||”轉為“+”。
3. 萬用字元不能使用‘[a-c]%’這種形式。應寫成如:
select col1, col2 from table_name where col1 like ‘[a]%’ OR col1 like ‘[b]%’ OR col1 like ‘[c]%’
4. 擷取字串長度函式應使用substr,起始位置為1表示從頭開始。因為db2中substr起點為1,0會報錯;在SqlServer資料庫中使用的是substring需要進行轉換。
5. 不得通過select percent n和select top n限制查詢結果集的記錄數。
6. join 與on 必須嚴格匹配,嚴禁出現沒有on的join。
7. join…on 後面不宜使用or,如果使用則需將or的範圍用( )括起來。
8. 不得使用select into 的格式。Select into是SQL Server特有語法,因為Oracle和DB2不支援。
9. 應將Null值與空字串(長度為零的字串)視為不同。雖然Oracle視Null與空字串為相同,但DB2和SQL Server卻視為不同。
原文地址: https://www.linuxprobe.com/sql-command.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2670363/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL語句規範的寫法SQL
- sql語句學習總結SQL
- MySQL基本sql語句總結MySql
- SQL單表查詢語句總結SQL
- Mysql跨表更新 多表update sql語句總結MySql
- hibernate在JPA規範中在控制檯無法出現SQL語句SQL
- 表示式和基本語句的規範
- Oracle行轉列、列轉行的Sql語句總結OracleSQL
- MySql常用操作SQL語句彙總MySql
- 賓語從句總結
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句SQL
- MySQL -update語句流程總結MySql
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- web前端開發規範總結Web前端
- restful介面設計規範總結REST
- 資料庫常用的sql語句彙總資料庫SQL
- MySQL 52個SQL效能優化策略SQL語句彙總MySql優化
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- EFCore常規操作生成的SQL語句一覽SQL
- SQL SELECT 語句SQL
- sql常用語句SQL
- Mybatis 查詢語句結果集總結MyBatis
- php-psr-chinese psr規範總結PHP
- TPCH模型規範、測試說明及22條語句模型
- 資料庫規範之SQL規範寫法資料庫SQL
- 1.3. SQL 語句SQL
- Oracle基本SQL語句OracleSQL
- Sql語句小整理SQL
- SQL語句優化SQL優化
- SQL語句IN的用法SQL
- SQL 語句學習SQL
- 複製表結構和資料SQL語句SQL
- Mysql 52條SQL語句效能優化策略彙總MySql優化
- SQL書寫規範(通用)SQL
- Oracle SQL精妙SQL語句講解OracleSQL