Mysql優化一

Mysql優化

1、存儲引擎

1.查看全部引擎

SHOW ENGINES;

2.查看默認存儲引擎

show VARIABLES LIKE '%STORAGE_engine%';

3.MyISAM和InnoDB

對比項 MyISAM InnoDB
主外鍵 不支持 支持
事務 不支持 支持
行表鎖 表鎖,即便操做一條記錄也會鎖住整個表,不適合高併發的操做 行鎖,操做時只鎖某一行,不對其餘行有影響,適合高併發的操做
緩存 只緩存索引,不緩存真實數據 不只緩存索引還要緩存真實數據,對內存的要求較高,並且內存的大小對其性能有決定性的影響
表空間
關注點 性能 事務
默認安裝 YES YES

2、SQL執行加載順序

From left_table
on join_condition
<join_type> join right_table
where where_condition
group by group_condition
having having_condition
select
distinct select_list
order by orderBy_condtion
limit limit_num

3、索引

1.定義

索引是幫助Mysql高效獲取數據的數據結構。——>本質:數據結構。mysql

其目的在於提升查詢效率,能夠類比於字典,能夠簡單理解爲排好序的快速查找數據結構算法

數據自己以外,數據庫還維護着一個知足特定查找算法的數據結構,這些數據結構以某種方式指向數據,這樣就能夠在這些數據結構的基礎上實現高級查找算法,這種數據結構就是索引。sql

一般說的索引若是沒有特別指明,說的都是B樹(多路搜索樹,並不必定是二叉的)結構組織的索引。其中彙集索引、次要索引、覆蓋索引、複合索引、前綴索引、惟一索引默認都是使用B+樹索引,統稱索引。固然,除了B+樹這種類型的索引以外,還有哈希索引等數據庫

索引會影響到查找和排序緩存

通常來講索引也很大,不可能所有存儲在內存中,所以索引每每以索引文件的方式存儲在磁盤上。mysql優化

2.特色

優勢:提升數據檢索的效率,下降了數據庫的IO成本。數據結構

​ 經過索引對數據進行排序,下降數據排序的成本,下降了CPU的消耗。併發

缺點:實際上索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,因此索引也是佔用空間的。高併發

​ 雖然其大大調高了查詢速度,同時卻會下降更新表的速度。由於更新表時不只要保存數據,還要保存一下 索引文件每次更新添加了索引列的字段,都會調整由於更新所帶來的鍵值變化後的索引信息。性能

​ 索引只是提升效率的一個因素,若是你的數據庫擁有大量的表,就須要花時間研究創建最優秀的索引,或 優化查詢。

3.分類

  • 單值索引

    一個索引只包含單個列,一個表能夠有多個單值索引。

  • 惟一索引

    索引列的值必須惟一,但容許有空值

  • 複合索引

    一個索引包含了多個列

4.基本語法

建立:UNIQUE是惟一索引, columnname只有一個是單值索引,有多個爲複合索引

CREATE [UNIQUE] INDEX indexname on tablename(columnname1, columnname2...)
or
ALERT tablename add [UNIQUE] INDEX [indexname] on (columnname1, columnname2...)

刪除:

DROP INDEX [indexname] on tablename

查看

SHOW INDEX FROM tablename

5.適合創建索引的狀況

  1. 主鍵自動創建惟一索引
  2. 頻繁做爲查詢條件的字段應該建立索引
  3. 查詢中與其餘表關聯的字段,外鍵關係創建索引
  4. 查詢中排序的字段,排序字段若經過索引去訪問,將大大提升排序速度
  5. 單鍵/組合索引的選擇問題(高併發適合建立組合索引)
  6. 查詢中統計或分組的字段

6.不適合建立索引的狀況

  1. 頻繁更新的字段

  2. where條件裏用不到的字段

  3. 表記錄太少

  4. 數據重複且分佈平均的表字段,所以應該只爲最常常查詢和最常常排序的數據創建索引

    索引的選擇性=不一樣的數目/總數目

相關文章
相關標籤/搜索