久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      MySQL性能調(diào)優(yōu)之分區(qū)表(總結分享)

      本篇文章給大家?guī)砹岁P于mysql的相關知識,其中主要介紹了關于性能調(diào)優(yōu)的相關問題,主要介紹了分區(qū)表的相關內(nèi)容,對于用戶而言,分區(qū)表是一個獨立的邏輯表,但是底層是由多個物理子表組成,下面一起來看一下,希望對大家有幫助。

      MySQL性能調(diào)優(yōu)之分區(qū)表(總結分享)

      推薦學習:mysql視頻教程

      對于用戶而言,分區(qū)表是一個獨立的邏輯表,但是底層是由多個物理子表組成。分區(qū)表對于用戶而言是一個完全封裝底層實現(xiàn)的黑盒子,對用戶而言是透明的,從文件系統(tǒng)中可以看到多個使用#分隔命名的表文件。
      mysql在創(chuàng)建表時使用partition by子句定義每個分區(qū)存放的數(shù)據(jù),在執(zhí)行查詢的時候,優(yōu)化器會根據(jù)分區(qū)定義過濾那些沒有我們需要數(shù)據(jù)的分區(qū),這樣查詢就無須掃描所有分區(qū)。
      分區(qū)的主要目的是將數(shù)據(jù)安好一個較粗的力度分在不同的表中,這樣可以將相關的數(shù)據(jù)存放在一起。
      接下來,我將從以下6個方面來談談分區(qū)表,分別是分區(qū)表的應用場景、分區(qū)表的限制、分區(qū)表的原理、分區(qū)表的類型、如何使用分區(qū)表、在使用分區(qū)表的時候需要注意的問題。

      一、分區(qū)表的應用場景

      1、表非常大以至于無法全部都放在內(nèi)存中,或者只在表的最后部分有熱點數(shù)據(jù),其他均是歷史數(shù)據(jù)。

      2、分區(qū)表的數(shù)據(jù)更容易維護

      (1)批量刪除大量數(shù)據(jù)可以使用清除整個分區(qū)的方式

      (2)對一個獨立分區(qū)進行優(yōu)化、檢查、修復等操作

      3、分區(qū)表的數(shù)據(jù)可以分布在不同的物理設備上,從而高效地利用多個硬件設備

      4、可以使用分區(qū)表來避免某些特殊的瓶頸

      (1)innodb的單個索引的互斥訪問

      (2)ext3文件系統(tǒng)的inode鎖競爭

      5、可以備份和恢復獨立的分區(qū)

      二、分區(qū)表的限制

      1、一個表最多只能有1024個分區(qū),在5.7版本的時候可以支持8196個分區(qū)

      2、在早期的mysql中,分區(qū)表達式必須是整數(shù)或者是返回整數(shù)的表達式,在mysql5.5中,某些場景可以直接使用列來進行分區(qū)。

      3、如果分區(qū)字段中有主鍵或者唯一索引的列,那么所有主鍵列和唯一索引列都必須包含進來。

      4、分區(qū)表無法使用外鍵約束

      三、分區(qū)表的原理

      分區(qū)表由多個相關的底層表實現(xiàn),這個底層表也是由句柄對象標識,我們可以直接訪問各個分區(qū)。存儲引擎管理分區(qū)的各個底層表和管理普通表一樣(所有的底層表都必須使用相同的存儲引擎),分區(qū)表的索引知識在各個底層表上各自加上一個完全相同的索引。從存儲引擎的角度來看,底層表和普通表沒有任何不同,存儲引擎也無須知道這是一個普通表還是一個分區(qū)表的一部分。分區(qū)表的操作按照以下的操作邏輯進行:

      1、select查詢

      當查詢一個分區(qū)表的時候,分區(qū)層先打開并鎖住所有的底層表,優(yōu)化器先判斷是否可以過濾部分分區(qū),然后再調(diào)用對應的存儲引擎接口訪問各個分區(qū)的數(shù)據(jù)

      2、insert操作

      當寫入一條記錄的時候,分區(qū)層先打開并鎖住所有的底層表,然后確定哪個分區(qū)接受這條記錄,再將記錄寫入對應底層表。

      3、delete操作

      當刪除一條記錄時,分區(qū)層先打開并鎖住所有的底層表,然后確定數(shù)據(jù)對應的分區(qū),最后對相應底層表進行刪除操作。

      4、update操作

      當更新一條記錄時,分區(qū)層先打開并鎖住所有的底層表,mysql先確定需要更新的記錄再哪個分區(qū),然后取出數(shù)據(jù)并更新,再判斷更新后的數(shù)據(jù)應該再哪個分區(qū),最后對底層表進行寫入操作,并對源數(shù)據(jù)所在的底層表進行刪除操作。

      有些操作時支持過濾的,例如,當刪除一條記錄時,MySQL需要先找到這條記錄,如果where條件恰好和分區(qū)表達式匹配,就可以將所有不包含這條記錄的分區(qū)都過濾掉,這對update同樣有效。如果是insert操作,則本身就是只命中一個分區(qū),其他分區(qū)都會被過濾掉。mysql先確定這條記錄屬于哪個分區(qū),再將記錄寫入對應得曾分區(qū)表,無須對任何其他分區(qū)進行操作。

      雖然每個操作都會“先打開并鎖住所有的底層表”,但這并不是說分區(qū)表在處理過程中是鎖住全表的,如果存儲引擎能夠自己實現(xiàn)行級鎖,例如innodb,則會在分區(qū)層釋放對應表鎖。

      推薦學習:mysql視頻教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號