存儲過程
存儲過程概念
Mysql儲存過程是一組為了完成特定功能的SQL語句集,經過編譯之后存儲在數據庫中,當需要使用該組SQL語句時用戶只需要通過指定儲存過程的名字並給定參數就可以調用執行它了,簡而言之就是一組已經寫好的命令,需要使用的時候拿出來用就可以了。
存儲過程作用好處
因為是提前寫好的,所以運行速度相對於批處理要快
可以多次被調用,隨時修改,所以調用簡單,使用靈活
還可以通過執行某一存儲過程的權限進行限制,能設置相應的數據的訪問權限的限制,保證了數據的安全。
存儲過程與存儲函數區別
存在意義 返回類型 調用機制
- 存儲過程:
1) 一般用於在數據庫中完成特定的業務 任務的
2) 可以定義返回類型,也可以不定義返回類型
3) SQL 語句中不可以調用
- 函數:
1) 一般用於特定的數據查詢或數據轉換處理
2) 申請時必須要定義返回類型,且程序體中必須定義return 語句。
3) 不能獨立執行,必須被SQL調用
索引
索引概念
索引就是為了我們高效查詢數據,用特定算法產生的數據結構,這種結構方便進行快速檢索數據,但是會增加數據庫內存,如果更新數據同時還要更新索引(結構的實現是B樹及其變種B+樹)滿足特定查找算法
索引原理
圖展示了一種可能的索引方式。左邊是數據表,一共有兩列七條記錄,最左邊的是數據記錄的物理地址(注意邏輯上相鄰的記錄在磁盤上也並不是一定物理相鄰的)。為了加快Col2的查找,可以維護一個右邊所示的二叉查找樹,每個節點分別包含索引鍵值和一個指向對應數據記錄物理地址的指針,這樣就可以運用二叉查找在O(log2n)的復雜度內獲取到相應數據。
三種索引
唯一索引
就是不允許存在重復索引值的索引,這樣可以防止數據庫添加重復鍵值的數據
主鍵索引
可以自動創建主鍵索引,要求每個主鍵值不重復,也算唯一索引一種特定類型
聚集索引
讓表中行的順序與鍵值的邏輯順序相同,這樣可以提供剛快訪問速度
索引優缺點
優點
提高系統的性能,提供了加快檢索速度,加強檢索能力
通過創建唯一性索引,可以確保每行數據唯一性
加塊了分組排序與表間連接的時間
缺點
需要耗費大量時間創建索引,占用空間大
數據庫更新時還需要更新索引
哪些列上適合創建索引
列上創建索引方然是為了發揮索引優勢
加快檢索速度,加強檢索能力-----在經常需要搜索的列上創建
通過創建唯一性索引,可以確保每行數據唯一性-----在作為主鍵的列上
加塊了分組排序與表間連接的時間-----在經常用到排序、連接的列上
哪些列上不適合創建索引
相反不經常查詢得列,數據量大、取值少的列,說白了就是冷門的數據,根本不值得用索引的
SQL優化
數據庫優化問題
合理的為數據庫合理創建索引
優化查詢語句,盡量避免全表掃描,select*等,注意在where和group by上創建索引時,盡量不要給字段設置null而是not null,判斷null會導致放棄索引而全表掃描,同理慎用!=,<>,or等連接符
建立存儲過程,觸發器,可提高查詢速度。