久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

SQL的開發建議都有哪些

132次閱讀
沒有評論

共計 2360 個字符,預計需要花費 6 分鐘才能閱讀完成。

本篇文章為大家展示了 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

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

更新(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

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

關于 SQL

1、用 EXISTS 替換 DISTINCT:

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

WHERE
D.DEPT_NO = E.DEPT_NO

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

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 的開發建議都有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-27發表,共計2360字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 微山县| 彰化县| 碌曲县| 池州市| 娱乐| 抚州市| 辽中县| 滕州市| 修文县| 岢岚县| 乌鲁木齐县| 奇台县| 西藏| 林周县| 鹰潭市| 安阳市| 凌海市| 敦煌市| 滨州市| 泰来县| 东丰县| 南川市| 浦江县| 西乌| 定西市| 高邮市| 谢通门县| 彝良县| 讷河市| 卫辉市| 乐至县| 碌曲县| 乐亭县| 长宁区| 辉县市| 滨州市| 宁津县| 平阴县| 海城市| 武山县| 博罗县|