溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL的開發建議都有哪些

發布時間:2021-10-25 15:38:37 來源:億速云 閱讀:178 作者:柒染 欄目:MySQL數據庫

本篇文章為大家展示了SQL的開發建議都有哪些,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

MYSQL 開發建議

關于建表

1、盡量使用INNODB存儲引擎。

2、建議使用UNSIGNED存儲非負數值。

3、建議使用INT UNSIGNED存儲IPV4。

4、強烈建議使用TINYINT來代替ENUM類型。

5、使用VARBINARY存儲大小寫敏感的變長字符串或二進制內容。

7、區分使用DATETIME和TIMESTAMP。存儲年使用YEAR類型。存儲日期使用DATE類型。 存儲時間(精確到秒)建議使用TIMESTAMP類型。

8、將大字段、訪問頻率低的字段拆分到單獨的表中存儲,分離冷熱數據。

9、禁止在數據庫表中存儲明文密碼。

10.表必須有主鍵,推薦使用UNSIGNED自增列作為主鍵。

11、表字符集使用UTF8,必要時可申請使用UTF8MB4字符集。

a)UTF8字符集存儲漢字占用3個字節,存儲英文字符占用一個字節。

b)UTF8統一而且通用,不會出現轉碼出現亂碼風險。

c)如果遇到EMOJ等表情符號的存儲需求,可申請使用UTF8MB4字符集。

12、采用合適的分庫分表策略。例如千庫十表、十庫百表等。

關于索引

1、禁止冗余索引。

2、禁止重復索引。

3、不在低基數列上建立索引,例如“性別”。

4、合理使用覆蓋索引減少IO,避免排序。

關于SQL

1、 不管數據庫隔離級別是什么狀態或者事務大小,養成COMMIT習慣,避免事務鎖的長期持有。

2、 更新(update)sql語句盡量使用主鍵條件

3、用IN代替OR。SQL語句中IN包含的值不應過多。

4、用UNION ALL代替UNION。UNION ALL不需要對結果集再進行排序。

5、盡量不使用order by rand()。

6、建議使用合理的分頁方式以提高分頁效率。

7、SELECT只獲取必要的字段,盡量少使用SELECT *。

8、SQL中避免出現now()、rand()、sysdate()、current_user()等不確定結果的函數。

9、減少與數據庫交互次數,盡量采用批量SQL語句。

使用下面的語句來減少和db的交互次數:

a)INSERT ... ON DUPLICATE KEY UPDATE

b)REPLACE INTO

c)INSERT IGNORE

d)INSERT INTO VALUES()

10、拆分復雜SQL為多個小SQL,避免大事務。

11、對同一個表的多次alter操作必須合并為一次操作。

Oracle 開發建議

使用索引需要注意的地方:

1、避免在索引列上使用NOT, 

2、避免在索引列上使用計算.

低效:SELECT … FROM DEPT WHERE SAL * 12 > 25000;

高效:SELECT … FROM DEPT WHERE SAL > 25000/12;

3、避免在索引列上使用IS NULL和IS NOT NULL

低效:(索引失效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;

高效:(索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0;

4、避免改變索引列的類型.

關于SQL

1、用EXISTS替換DISTINCT:

(低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E

WHERE D.DEPT_NO = E.DEPT_NO

And E.sex =man

(高效): SELECT DEPT_NO,DEPT_NAME FROM DEPT D

WHERE EXISTS

( SELECT ‘X' FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO

And E.sex =man

);

2、用(UNION)UNION ALL替換OR (適用于索引列)

高效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 UNION ALL

SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE REGION = “MELBOURNE”

低效: SELECT LOC_ID , LOC_DESC , REGION FROM LOCATION WHERE LOC_ID = 10 OR REGION = “MELBOURNE”

3、用UNION-ALL 替換UNION ( 如果有可能的話)。

4、Order By語句加在索引列,最好是主鍵PK上。

SELECT DEPT_CODE FROM DEPT ORDER BY DEPT_TYPE(低效)

SELECT DEPT_CODE FROM DEPT ORDER BY DEPT_CODE (高效)

5、避免使用耗費資源的操作:

帶有DISTINCT,UNION,MINUS,INTERSECT的SQL語句會啟動SQL引擎 執行耗費資源的排序(SORT)功能.

6、使用Where替代Having(如果可以的話)

低效:

SELECT JOB , AVG(SAL)

FROM EMP GROUP JOB HAVING JOB = ‘PRESIDENT'AND AVG(SAL)>XXX

高效:

SELECT JOB , AVG(SAL)

FROM EMP

WHERE JOB = ‘PRESIDENT'

OR JOB = ‘MANAGER' GROUP JOB Having AND AVG(SAL)>XXX

7、通常來說,如果語句能夠避免子查詢的使用,就盡量不用子查詢。因為子查詢的開銷是相當昂貴的。具體的例子在后面的案例“一條SQL的優化過程”中。

8、注意WHERE子句中的連接順序。合理選擇驅動表。

9、SELECT子句中避免使用 *。ORACLE在解析的過程中, 會將'*' 依次轉換成所有的列名, 這個工作是通過查詢數據字典完成的, 這意味著將耗費更多的時間 。

上述內容就是SQL的開發建議都有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女