1.規則優化, 表現爲sql 語句優化
2. 物理優化, 表現爲 訪問路徑, 硬盤, 內存等,, 在已經創建了索引和排序文件的情況下, 需要考慮如何實現策略
3. 代價評估優化, 對多個候選策略 進行評估, 選擇代價最小的一個,
一般來說: 查詢的總代價 爲 cpu 和 I/O代價之和. ()輸入輸出) 然後考慮查詢量
1: 內連接, 外聯,自連接
內連接 產生記錄爲M*N,
笛卡爾積: m*n條記錄,重複的也計算, select* from T1,T2, 若指定連接字段,爲子查詢, a 每一行與b每一行比較,相同的記錄產出,重複 的也產出. 和內連接 是一樣的產出記錄, 等價於 using(fild) 用法,只是
自然連接: 在相同列上有相同值 的記錄挑選出來,重複列去除, 將選擇的結果儘量提前執行.
深入可以看sql執行計劃
2 分表優化:
將大表 分爲若干個小表: 1永久分裂, 設計時考慮, 二: 臨時分裂; 語法控制. 可以放在磁盤 或不同邏輯設備上
3.減少嵌套層數, 會成幾何級的降低效率
4.利用視圖: 從多個基本表或視圖中導出的表,數據庫只存定義,不存數據 . 爲虛擬表: 可以crud 隨真實數據而改變 優點: 提供某些數據的安全性, 異常數據複雜性, 簡化查詢, 特殊查詢 sql: create view <viewName> {[col1, col2, col3 ]} as<select 語句> +上 [with chech option] : 表示在對視圖修改,刪除,插入, 仍要保證 selec語句的表達式, 注意: 對視圖更新,刪除時,也會更改基本表,這種情況下也就在視圖只關聯一個表時, 但是大部分視圖都不可以更新: 1 帶有group by, 聚集函數.多表關聯; 來自表達式或常量,許刪不許改.
5. gront:授權, revoke: 撤銷授權 view update query .....操作的權限
6. 索引優化: 索引佔用存儲空間和處理,並不是越多越好, 不必要的索引會是系統變慢, 難維護(更新難), 只讀取 ,不更新的話還好,
如果創建了主鍵,那麼自動以主鍵升序 創建索引,
建立 unique 索引事,列值唯一,cluster爲簇索引: 留待研究
7 注意 對null 值的處理
8. sql爲原子性操作, commit 之前, 出現異常則,一系列操作回滾,無效, 也可以rollback, 回覆, 但是如果commi成功那麼久數據就永久性更改了. 即數據庫事務
8, distinct (fild): 明顯的有區別的, 去除重複
9 where (filed between 3 and 5) exists: 檢查某個屬性是否有 元組,, 有返回記錄返回true,無返回false _ 代表一個字符,%通配任意個字符, not exists 相反
10 count max min avg sum
11: where having count(column)>5
12 集合操作符: union 並(聯合) intersect 交(交叉,橫斷 橫切) 跟sql 語句 except 除(把.... 除外) 後面跟sql語句