其實sql語句的優化核心就在避免全表掃瞄上面
對查詢語句優化,避免全表掃瞄
首先應考慮在where
及order by
涉及的列上建立索引
避免在where
子句中對字段進行表示式和函式操作(避免where
進行null、!=、>= 、<=
等運算導致的全表掃瞄)
在group by
後面增加order by null
就可以防止group by
的預設排序 (預設排序可能會降低速度)
使用join
連線代替子查詢 (join
不會在記憶體建立臨時表,子查詢會)
避免對沒有索引使用or
導致索引失效而全表掃瞄(union
可以代替就用union
)
慎用in
和not in
( 考慮是否可以exists
代替in
)
查詢資料的範圍限制(如果只要一條,語句結尾加上limit 1
)
禁止使用like %開頭
方式的模糊查詢 (考慮全文索引)
禁止使用select *
方式查詢資料 (要什麼列就寫什麼列)
建立欄位時給予預設值(避免查詢的時候where colum = null
的情況出現)
《sql 連線的區別》
《聯合查詢 union和union all的區別》
遵守三大正規化
適當的根據專案設計特殊列(反正規化)
字段、索引越少越好
欄位過多時分隔成兩個表
字段型別選擇(合適的型別能夠節省空間及避免設計不當導致coding時的問題)
合適的索引(索引建在小字段上,對於大的文字字段甚至超長字段,不建索引)
盡量避免字段值允許為null
盡量避免使用主外來鍵
每張表一定要有id
使用procedure analyse()
分析表(mysql會給出你相關建議)
正確的選擇引擎 (myisam和inoodb)
myisam和inoodb的區別?
屬性名稱
myisam
inoodb
事務不支援
支援全文索引
支援不支援
鎖機制表鎖
行鎖主外來鍵
不支援支援
這幾個點的區別比較明顯,省略其他的…
手動方式
windows下的話配置好環境變數,用命令備份(source
命令恢復)
linux下的話進入到執行目錄和windows一樣用命令操作
備份語法:mysqldump –u -賬號 –密碼 資料庫 [表名1 表名2…] > 檔案路徑
恢復語法:source 檔案路徑
自動(定時任務)方式
自動方式其實說白了就是定時方式嘛,無論是windows
還是linux
都是一樣的思路。先編寫指令碼 (.bat
/.sh
指令碼) 然後通過其他方式定時執行。windows
的話找到任務計畫程式建立任務即可,inux
的話可以通過crontab
來完成。網上有很多相關的,看一遍就懂。
tips:sql優化這方面還是要去積累,久了就有經驗了,技巧是很多的學不完的畢竟。
Mysql優化 SQL語句優化
索引優化 where 字段 組合索引 最左字首 索引下推 非選擇行 不加鎖 索引覆蓋 不回表 on兩邊 排序 分組 explain分析語句情況,看建立索引沒,或者建立錯誤,響應時間長的話可以看下慢查詢日誌 盡量不要用 查所有字段的話,select查詢列中的字段如果沒有索引的話,會造成回表 limit...
MySQL優化(一)常用SQL優化
一 新增 二 刪除 delete from 刪除語句加where條件,如果是刪除全部記錄,使用truncate table 表名,而不使用delete語句。三 修改 四 查詢 索引這裡就不重複了,一般在建表時對常用的查詢欄位就應該加上索引。1 單錶查詢 首先盡量只查詢單錶,可以分解成多次單錶查詢的盡...
MySQL優化(二) 優化SQL語句
2.優化子查詢,派生表和檢視引用 3.優化information schema查詢 4.優化資料變更宣告 5.優化資料庫許可權 6.其他優化技巧 資料庫應用程式的核心邏輯是通過sql語句執行的,無論是直接通過直譯器發出還是通過api在後台提交。查詢以select 語句的形式執行資料庫中的所有查詢操作...