SHOW ENGINES;
show VARIABLES LIKE '%STORAGE_engine%';
對比項 | MyISAM | InnoDB |
---|---|---|
主外鍵 | 不支持 | 支持 |
事務 | 不支持 | 支持 |
行表鎖 | 表鎖,即便操做一條記錄也會鎖住整個表,不適合高併發的操做 | 行鎖,操做時只鎖某一行,不對其餘行有影響,適合高併發的操做 |
緩存 | 只緩存索引,不緩存真實數據 | 不只緩存索引還要緩存真實數據,對內存的要求較高,並且內存的大小對其性能有決定性的影響 |
表空間 | 小 | 大 |
關注點 | 性能 | 事務 |
默認安裝 | YES | YES |
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
索引是幫助Mysql高效獲取數據的數據結構。——>本質:數據結構。mysql
其目的在於提升查詢效率,能夠類比於字典,能夠簡單理解爲排好序的快速查找數據結構。算法
數據自己以外,數據庫還維護着一個知足特定查找算法的數據結構,這些數據結構以某種方式指向數據,這樣就能夠在這些數據結構的基礎上實現高級查找算法,這種數據結構就是索引。sql
一般說的索引若是沒有特別指明,說的都是B樹(多路搜索樹,並不必定是二叉的)結構組織的索引。其中彙集索引、次要索引、覆蓋索引、複合索引、前綴索引、惟一索引默認都是使用B+樹索引,統稱索引。固然,除了B+樹這種類型的索引以外,還有哈希索引等數據庫
索引會影響到查找和排序緩存
通常來講索引也很大,不可能所有存儲在內存中,所以索引每每以索引文件的方式存儲在磁盤上。mysql優化
優勢:提升數據檢索的效率,下降了數據庫的IO成本。數據結構
經過索引對數據進行排序,下降數據排序的成本,下降了CPU的消耗。併發
缺點:實際上索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,因此索引也是佔用空間的。高併發
雖然其大大調高了查詢速度,同時卻會下降更新表的速度。由於更新表時不只要保存數據,還要保存一下 索引文件每次更新添加了索引列的字段,都會調整由於更新所帶來的鍵值變化後的索引信息。性能
索引只是提升效率的一個因素,若是你的數據庫擁有大量的表,就須要花時間研究創建最優秀的索引,或 優化查詢。
單值索引
一個索引只包含單個列,一個表能夠有多個單值索引。
惟一索引
索引列的值必須惟一,但容許有空值
複合索引
一個索引包含了多個列
建立: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
頻繁更新的字段
where條件裏用不到的字段
表記錄太少
數據重複且分佈平均的表字段,所以應該只爲最常常查詢和最常常排序的數據創建索引
索引的選擇性=不一樣的數目/總數目