MYSQL數據庫優化(一)

  • 內存的讀寫速度遠大於磁盤的讀寫速度,減小磁盤讀寫,能夠做爲重點優化方向。
  • 數據庫內部最重要的就是存儲結構,存儲結構必然涉及到數據結構知識。好比用到了經常使用的哈希圖、樹。
  • MYSQL數據庫經常使用兩種引擎,InnoDB、MyISAM,能夠直接對錶指定數據庫引擎。
  • MYSQL索引是一種數據結構,幫助更快的查詢數據。索引使用的是B+樹(B樹改進版,一個節點能夠包含多個值,深度可控,IO讀寫次數少,三層能夠保存數千萬個值)。葉子節點存值,其他節點存索引值。數據結構可視化工具:https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
  • MYSQL生成的表和數據會保存在mysql/data目錄下,並以表名生成對應的目錄。FRM文件是表設計文件。
  • InnoDB引擎,會在mysql/data/表目錄下生成IBD文件。IBD文件包含索引和數據,索引是彙集型索引。
  • MyISAM引擎,會在mysql/data/表目錄下生成MYI和MYD文件,MYI是索引文件,記錄存儲地址,MYD是數據文件。索引是非彙集型索引。不支持事務。
  •  使用索引注意事項:1>.不要在DML頻繁的表上加索引(一百萬條數據維護B+樹耗性能)。 2>.不要在數據較少的表上加索引。3>.儘可能不要在索引列上加函數計算。 4>.不要select *查詢,索引會失效。5>.在查詢比較頻繁的表上加索引。6>.在離散量比較大的字段加索引(計算方法:count(distinct col):count(col)越大越好,如uuid,外鍵ID等)
  • 儘可能使用int自增做爲主鍵,由於這樣符合數組的特性,數組查詢效率較高(訪問局部性原理,數組內存地址連續,讀取一個扇區的數據放入二級緩存便可,速度更快,不用反覆查詢內存)。
  • InnoDB引擎建立的表,能夠不設置主鍵。可是自己不能沒有主鍵,當不設主鍵的時候,會在表中找到非NULL而且設置爲索引的字段做爲主鍵,若是找不到這樣的字段,就用_rowid做爲主鍵,這樣會致使查詢效率變差。1>全表掃描性能差。2>_rowid實現源自於全局的序列,這樣高併發插入數據共享此序列,MYSQL保證數據安全,會加上鎖。這必然致使性能下降
  • InnoDB引擎主鍵索引查詢時,會根據索引值直接在葉子節點拿到值。其餘如字段索引,會生成個B+樹,葉子節點保存自己索引值和主鍵值,再根據主鍵值回到主鍵索引B+樹中獲取真正的值(回表查詢)。
相關文章
相關標籤/搜索