java7优化,七、索引优化分析
SQL性能下降的原因
查詢語句寫的不好
索引失效
關聯查詢太多
服務器調優及各個參數的的設置(緩沖、線程數等等)
常見的JOIN查詢
1、SQL的執行順序
手寫的順序:
真正機器執行的順序:
2、七種join查詢
最后兩種語法mysql不支持,但是我們可以用union來聯合其他的查詢結果來拼湊出最終結果。
索引
1、什么是索引?
MySQL官方對索引的定義為:索引(Index)是幫助MySQL高效獲取數據的數據結構。
也可以簡單理解為“排好序的快速查找數據結構”
數據本身之外,數據庫還維護著一個滿足特定查找算法的數據結構,這些數據結構以某種方式指向數據,這樣就可以在這些數據結構的基礎上實現高級查找算法,這種數據結構就是索引。
一般來說索引本身也很大,不可能全部存儲在內存中,因此所以往往以索引文件的形式存儲在磁盤上。
2、索引的優勢和劣勢
優勢
提高了數據檢索的效率,降低了數據庫的IO成本
降低了數據排序的成本,降低了CPU的消耗
劣勢
實際上索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄,所以索引列也是要占用空間的
雖然索引大大的提高了查詢速度,但同時也會降低更新表的速度,因為進行更新表時,MySQL不僅要保存數據,還要保存一下索引文件每次更新添加了索引列的字段,都會調整因為更新所帶來的鍵值變化后的索引信息
3、索引的分類
單值索引:即一個索引只包含單個列,一個表可以有多個單值索引
唯一索引:索引列的值必須唯一但允許有空值
復合索引:即一個索引包含多個列
4、基本語法
創建
CREATE [UNIQUE] INDEX indexName ON table_name(columnname(length))
ALTER table_name ADD [UNIQUE] INDEX indexName ON (columnname(length))
如果時CHAR、VARCHAR類型,length可以小于字段實際長度,如果是BLOB和TEXT類型,必須指定length
刪除
DROP INDEX [indexName] ON table_name
查看
SHOW INDEX FROM table_name
5、哪些情況需要創建索引?
主鍵自動建立唯一索引
頻繁作為查詢條件的字段應該創建索引
查詢中與其他表關聯的字段,外鍵關系建立索引
頻繁更新的字段不合適創建索引
Where條件里用不到的字段不創建索引
在高并發下傾向創建組合索引
查詢中排序的字段,排序字段若通過索引去訪問將大大提高排序速度
查詢中統計或者分組的字段
6、哪些情況不需要創建索引?
表記錄太少
經常增刪改的表
如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果
總結
以上是生活随笔為你收集整理的java7优化,七、索引优化分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 十二星座用JAVA怎么,十二星座的“程序
- 下一篇: linux 误删除mysql表能恢复吗,