最佳化MySQL資料庫查詢

來源:互聯網
上載者:User

最佳化MySQL資料庫查詢
最簡單且最安全的格式,它是磁碟格式中最快的.速度來自於資料能在磁碟上被找到的難易程度.當鎖定有一個索引和靜態格式的東西是,它很簡單,只是行長度乘以數量.而且在掃描一張表時,每次用磁碟讀取來讀入常數個記錄是很容易的.安全性來源於如果當寫入一個靜態myisam檔案時導致電腦down掉,myisamchk很容易指出每行在哪裡開始和結束,因此,它通常能收回所有記錄,除了部分被寫入的記錄.在mysql中所有索引總能被重建
  
  1.2動態myisam
  
  這種格式每一行必須有一個頭說明它有多長.當一個記錄在更改期間變長時,它可以在多於一個位置上結束.能使用optimize tablename或myisamchk整理一張表.如果在同一個表中有像某些varchar或者blob列那樣存取/改變的待用資料,將動態列移入另外一個表以避免片段.
  
  1.2.1壓縮myisam,用可選的myisampack工具產生
  
  1.2.2記憶體
  
  這種格式對小型/中型表很有用.對拷貝/建立一個常用的尋找表到洋heap表有可能加快多個表連接,用同樣資料可能要快好幾倍時間.
  
  select tablename.a,tablename2.a from tablename,tablanem2,tablename3 where
  
  tablaneme.a=tablename2.a and tablename2.a=tablename3.a and tablename2.c!=0;
  
  為了加速它,可以用tablename2和tablename3的連接建立一個暫存資料表,因為用相同列(tablename1.a)尋找.
  
  CREATE TEMPORARY TABLE test TYPE=HEAP
  
  SELECT
  
  tablename2.a as a2,tablename3.a as a3
  
  FROM
  
  tablenam2,tablename3
  
  WHERE
  
  tablename2.a=tablename3.a and c=0;
  
  SELECT tablename.a,test.a3 from tablename,test where tablename.a=test.a1;
  
  SELECT tablename.a,test,a3,from tablename,test where tablename.a=test.a1 and ....;
  
  1.3靜態表的特點
  
  1.3.1預設格式.用在表不包含varchar,blob,text列的時候
  
  1.3.2所有的char,numeric和decimal列填充到列寬度
  
  1.3.3非常快
  
  1.3.4容易緩衝
  
  1.3.5容易在down後重建,因為記錄位於固定的位置
  
  1.3.6不必被重新組織(用myisamchk),除非是一個巨量的記錄被刪除並且最佳化儲存大小
  
  1.3.7通常比動態表需要更多的儲存空間
  
  1.4動態表的特點
  
  1.4.1如果表包含任何varchar,blob,text列,使用該格式
  
  1.4.2所有字串列是動態
  
  1.4.3每個記錄前置一個位.
  
  1.4.4通常比定長表需要更多的磁碟空間
  
  1.4.5每個記錄僅僅使用所需要的空間,如果一個記錄變的很大,它按需要被分成很多段,這導致了記錄片段
  
  1.4.6如果用超過行長度的資訊更新行,行被分段.
  
  1.4.7在系統down掉以後不好重建表,因為一個記錄可以是多段
  
  1.4.8對動態尺寸記錄的期望行長度是3+(number of columns+7)/8+(number of char columns)+packed size of numeric columns+length of strings +(number of NULL columns+7)/8
  
  對每個串連有6個位元組的懲罰.無論何時更改引起記錄的變大,都有一個動態記錄被串連.每個新串連至少有20個位元組,因此下一個變大將可能在同一個串連中.如果不是,將有另外一個串連.可以用myisamchk -惡毒檢查有多少串連.所有串連可以用myisamchk -r刪除.
  
  1.5壓縮表的特點
  
  1.5.1一張用myisampack公用程式製作的唯讀表.
  
  1.5.2解壓縮代碼存在於所有mysql分發中,以便使沒有myisampack的串連也能讀取用myisampack壓縮的表
  
  1.5.3佔據很小的磁碟空間
  
  1.5.4每個記錄被單獨壓縮.一個記錄的頭是一個定長的(1~~3個位元組)這取決於表的最大記錄.每列以不同的方式被壓縮.一些常用的壓縮類型是:
  
  a:通常對每列有一張不同的哈夫曼表  b:尾碼空白壓縮  c:首碼空白壓縮 d:用值0的數字使用1位儲存
  
  e:如果整數列的值有一個小範圍,列使用最小的可能類型來儲存.例如:如果所有的值在0到255之間,一個bigint可以作為一個tinyint儲存
  
  g:如果列僅有可能值的一個小集合,列類型被轉換到enum  h:列可以使用上面的壓縮方法的組合
  
  1.5.5能處理定長或動態長度的記錄,去不能處理blob或者text列 1.5.6能用myisamchk解壓縮
  
  mysql能支援不同的索引類型,但一般的類型是isam,這是一個B樹索引並且能粗略的為索引檔案計算大小為(key_length+4)*0.67,在所有的鍵上的總和.
  
  字串索引是空白壓縮的。如果第一個索引是一個字串,它可將壓縮首碼如果字串列有很多尾部空白或是一個總部能甬道全長的varchar列,空白壓縮使索引檔案更小.如果很多字串有相同的首碼.
  
  1.6記憶體表的特點
  
  mysql內部的heap表使用每偶溢出去的100%動態雜湊並且沒有與刪除有關的問題.只能通過使用在堆表中的一個索引來用等式存取東西(通常用'='操作符)
  
  堆表的缺點是:
  
  1.6.1想要同時使用的所有堆表需要足夠的額外記憶體
  
  1.6.2不能在索引的一個部分搜尋
  
  1.6.3不能按順序搜尋下一個條目(即,使用這個索引做一個order by)

:記憶體的限制.當cpu需要超出適合cpu緩衝的資料時,緩衝的頻寬就成了記憶體的一個瓶頸---不過現在記憶體大的驚人,一般不會出現這個問題.
  
  第二步: (本人使用的是學校網站的linux平台(Linux ADVX.Mandrakesoft.com 2.4.3-19mdk ))
  
  1:調節伺服器參數
  
  用shell>mysqld-help這個命令聲廠一張所有mysql選項和可組態變數的表.輸出以下資訊:
  
  possible variables for option--set-variable(-o) are:
  
  back_log current value:5 //要求mysql能有的串連數量.back_log指出在mysql暫停接受串連的時間內有多少個串連請求可以被存在堆棧中
  
  connect_timeout current value:5 //mysql伺服器在用bad handshake(不好翻譯)應答前等待一個串連的時間
  
  delayed_insert_timeout current value:200 //一個insert delayed在終止前等待insert的時間
  
  delayed_insert_limit current value:50 //insert delayed處理器將檢查是否有任何select語句未執行,如果有,繼續前執行這些語句
  
  delayed_queue_size current value:1000 //為insert delayed分配多大的隊
  
  flush_time current value:0 //如果被設定為非0,那麼每個flush_time 時間,所有表都被關閉
  
  interactive_timeout current value:28800 //伺服器在關上它之前在洋互動串連上等待的時間
  
  join_buffer_size current value:131072 //用與全部串連的緩衝區大小
  
  key_buffer_size current value:1048540 //用語索引塊的緩衝區的大小,增加它可以更好的處理索引
  
  lower_case_table_names current value:0 //
  
  long_query_time current value:10 //如果一個查詢所用時間大於此時間,slow_queried計數將增加
  
  max_allowed_packet current value:1048576 //一個包的大小
  
  max_connections current value:300 //允許同時串連的數量
  
  max_connect_errors current value:10 //如果有多於該數量的中斷串連,將阻止進一步的串連,可以用flush hosts來解決
  
  max_delayed_threads current value:15 //可以啟動的處理insert delayed的數量
  
  max_heap_table_size current value:16777216 //
  
  max_join_size current value:4294967295 //允許讀取的串連的數量
  
  max_sort_length current value:1024 //在排序blob或者text時

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.