天天看點

MySQL 第九篇:Mysql 與 ORACLE 開發差異、Mysql 優化

我把MySQL的内容整理成9篇部落格,學完這9篇部落格雖不能說能成為大神,但是應付一般中小企業的開發已經足夠了,有疑問或建議的歡迎留言讨論。

MySQL 第九篇:Mysql 與 ORACLE 開發差異、Mysql 優化
MySQL 第九篇:Mysql 與 ORACLE 開發差異、Mysql 優化

a) 适當的違反三大範式。

b) 适當建立索引。

c) 對表進行水準劃分(按照一個周期對表資料進行拆分)。

d) 對表進行垂直劃分(對字段内容較長的字段進行拆分到一個新表)。

e) 選擇合适的字段類型。能占用位元組小的字段就不要去大字段。

f) 檔案、圖檔等二進制的檔案使用檔案系統存儲,不用資料庫。資料庫中隻存儲檔案路徑。

g) 甯可集中批量操作 也不要頻繁操作。

h) 合适的引擎選擇 mysql 的資料庫引擎,innodb,myisam,memory 。Myisam 比innodb 的讀速度更快。Innodb 是支援事務。Myisam 不支援事務。

a. 使用 EXPLAIN 進行 SQL 語句的執行解析。

b. Mysql 慢 日 志 的 功 能 需 要 去 配 置 文 件 修 改 slow_query_log=/usr/xx.txtlong_query_time=2 機關秒。

c. 查詢語句盡量避免全表掃描,在 where order by 等涉及的字段建立索引。

d. 盡量避免在 where 子句中對 null 值進行判斷,如果進行 null 判斷則會放棄索引查詢走全表掃描,解決辦法:在 null 字段設定一個預設值來代表無值。

e. 盡量避免在 where 子句中使用!= 或 <>操作符,放棄走索引進行全表掃描,解決辦法:改為>= <=。

f. Like 查詢,使用’%jame’ 不會走索引,使用’jame%’ 會走索引。

g. 盡量避免在 where 子句中使用 or 來連接配接條件 不會走索引走全表掃描。解決辦法:将兩個條件作為兩條 sql 語句執行 使用 union all 來進行結果集的整合。

h. In 和 not in 也要少用,會導緻全表掃描。

i. 盡量避免在 where 子句中對字段進行表達式的操作,不會走索引會走全表掃描。Num/3=100 修改成 num = 3*100。

j. 盡量避免在 where 子句中使用函數對字段進行操作. Substring(name,1,3)=’xzg’ 修改成name like ‘xzg%’。

k. 不要在 Where 字句的 =号的左邊進行函數或者其他表達式的運算,資料庫可能就無法正确使用索引。

l. 使用 exists 來代替 in。

m. 在代碼中盡量避免使用 select * from 而是列出準确的字段名。

n. 盡量避免使用遊标。

o. 資料較少的表 盡量讓他走全表掃描。