服務項目:網站建設、仿站、程序開發、APP開發設計、移動網站開發設計、企業網站設計、電子商務網站開發、網站維護、網站推廣、UX/UI 、HTML5、CSS3、JS / Jquery ...
          四川浚浚科技有限公司
          四川浚浚科技有限公司 (開發設計官網)TEL : 15308000360 / QQ : 38585404

          您的位置:首頁 > 技術經驗 > 數據庫 > 正文

          MYSQL數據庫優化的具體方法說明
          技術支持服務電話:15308000360 【7x24提供運維服務,解決各類系統/軟硬件疑難技術問題】

          以下的文章主要講述的是實現MySQL簡單實用優化的具體方法,以及在實際操作中有哪些具體操作步驟是值得我們大家注意的。以下的文章主要描述的是MySQL數據庫簡單實用優化的具體方法的實現,中包括如何定期的表進行分析與檢查,以及如何正確對表進行定期的優化,以下就是具體方案的描述,希望在你今后的學習中會有所幫助。

          1、定期分析表和檢查表 分析表的語法如下:
          ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name[, tbl_name]...
          以上語句用于分析和存儲表的關鍵字分布,分析的結果將可以使得系統得到準確的統計信息,使得SQL能夠生成正確的執行計劃。如果用戶感覺實際執行計劃并不是預期的執行計劃,執行一次分析表可能會解決問題。在分析期間,使用一個讀取鎖定對表進行鎖定。這對于MyISAM,DBD和InnoDB表有作用。例如分析一個數據表
          analyze table table_name 檢查表的語法如下: CHECK TABLE tb1_name[,tbl_name]...[option]...option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED} 檢查表的作用是檢查一個或多個表是否有錯誤,CHECK TABLE 對MyISAM 和 InnoDB表有作用,對于MyISAM表,關鍵字統計數據被更新 CHECK TABLE 也可以檢查視圖是否有錯誤,比如在視圖定義中被引用的表不存在。
          2. 定期優化表 優化表的語法如下:
          OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name [,tbl_name]... 如果刪除了表的一大部分,或者如果已經對含有可變長度行的表(含有 VARCHAR、BLOB或TEXT列的表)進行更多更改,則應使用OPTIMIZE TABLE命令來進行表優化。這個命令可以將表中的空間碎片進行合并,并且可以消除由于刪除或者更新造成的空間浪費,但OPTIMIZE TABLE 命令只對MyISAM、 BDB 和InnoDB表起作用。 例如: optimize table table_name
          注意: analyze、check、optimize執行期間將對表進行鎖定,因此一定注意要在MySQL數據庫不繁忙的時候執行相關的操作。常用的SQL優化 我們在開發的時候常常用到的SQL語句,無非是INSERT、GROUPBY等等。對于這些SQL語句,我們怎么進行優化? 1. 大批量插入數據 當用load命令導入數據的時候,適當的設置可以提高導入的速度。
          對于MyISAM存儲引擎的表,可以通過如下方式快速的導入大量的數據 ALTER TABLE tb1_name DISABLE KEYS;
          loading the data
          ALTER TABLE tb1_name ENABLE KEYS;
          DISABLE KEYS 和 ENABLE KEYS 用來打開或者關閉MyISAM表非唯一索引的更新。在導入大量的數據到一個非空的MyISAM表時,通過設置這兩個命令,可以提高導入的效率。
          對于導入大量的數據到一個空的MyISAM表時,默認就是先導入數據然后才創建索引的,索引不用進行設置。
          load data infile '/home/mysql/text_txt' into table text 對于InnoDB類型的表,這種方式不能提高導入數據的效率,但也有幾種針對InnoDB類型的表進行優化的方式。 1. 因為InnoDB類型的表式按照主鍵的順序保存的,所以將導入的數據按照主鍵的順序排序,可以有效提高導入數據的效率。 2. 在導入數據前執行 SET UNIQUE_CHECKS=0,關閉唯一性校驗,在導入結束后執行SET UNIQUE_CHECKS=1,恢復唯一性校驗,可以提高導入的效率。 3. 如果應用使用自動提交的方式,建議在導入前執行SET AUTOCOMMIT=0,關閉自動提交,導入結束后執行SET AUTOCOMMIT=1,打開自動提交,也可以提高導入效率。優化INSERT語句
          當進行數據INSERT的時候,可以考慮采用以下幾種方式進行優化 1. 如果同時從一個客戶插入很多行,盡量使用多個值表的INSERT語句,這種方式將大大縮短客戶端與MySQL數據庫的鏈接、關閉等消耗,使得效率比分開執行的單個INSERT語句快. 例如:
          insert into test values(1,2)
          insert into test values(3,4)
          insert into test values(5,6)
          將上面三句改為:insert into test values(1,2),(3,4),(5,6)...... 2. 如果從不同客戶插入很多行,能通過使用INSERT DELAYED 語句得到更高的速度。 DELAYED 的含義是讓INSERT 語句馬上執行,其實數據都被放在內存的隊列中,并沒有真正寫入磁盤,這比每條語句分別插入要快得多;LOW_PRIORITY剛好相反,在所有其他用戶對表的讀寫完后才進行插入。 3. 將索引文件和數據文件分在不同的磁盤上存放 4. 如果進行批量插入,可以增加bulk_insert_buffer_size變量值的方法來提高速度,但是,這只能對于MyISAM表使用。 5. 當從一個文本文件中裝載一個表時,使用LOAD DATA INFILE。 這通常比使用很多insert語句快20倍左右。下面是mysql 性能優化的一些其它需要注意的地方,大家結合和,充分發揮mysql的性能。
          以下的文章主要向大家描述的是MySQL數據庫優化,SQL的實際操作步驟,我們講述的是MySQL數據庫優化,SQL的三步驟,以下就是這三步驟的具體操作的詳細描述,望你瀏覽之后會對其有所收獲。
          MySQL數據庫優化--SQL第一步:
          1:磁盤尋道能力,以高速硬盤(7200轉/秒),理論上每秒尋道7200次.這是沒有辦法改變的,優化的方法是----用多個硬盤,或者把數據分散存儲.
          2:硬盤的讀寫速度,這個速度非常的快,這個更容易解決--可以從多個硬盤上并行讀寫.
          3:cpu.cpu處理內存中的數據,當有相對內存較小的表時,這是最常見的限制因素.
          4:內存的限制.當cpu需要超出適合cpu緩存的數據時,緩存的帶寬就成了內存的一個瓶頸---不過現在內存大的驚人,一般不會出現這個問題.
          MySQL數據庫優化--SQL第二步: (本人使用的是學校網站的linux平臺(Linux ADVX.Mandrakesoft.com 2.4.3-19mdk ))
          1:調節服務器參數
          用shell>MySQL(和PHP搭配之最佳組合)d-help這個命令聲廠一張所有MySQL(和PHP搭配之最佳組合)選項和可配置變量的表.輸出以下信息:
          possible variables for option--set-variable(-o) are:
          back_log current value:5 //要求MySQL(和PHP搭配之最佳組合)能有的連接數量.back_log指出在MySQL(和PHP搭配之最佳組合)暫停接受連接的時間內有多少個連接請求可以被存在堆棧中
          connect_timeout current value:5 //MySQL(和PHP搭配之最佳組合)服務器在用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時使用的字節數量
          max_tmp_tables current value:32 //一個連接同時打開的臨時表的數量
          max_write_lock_count current value:4294967295 //指定一個值(通常很小)來啟動MySQL(和PHP搭配之最佳組合)d,使得在一定數量的write鎖定之后出現read鎖定
          net_buffer_length current value:16384 //通信緩沖區的大小--在查詢時被重置為該大小
          query_buffer_size current value:0 //查詢時緩沖區大小
          record_buffer current value:131072 //每個順序掃描的連接為其掃描的每張表分配的緩沖區的大小
          sort_buffer current value:2097116 //每個進行排序的連接分配的緩沖區的大小
          table_cache current value:64 //為所有連接打開的表的數量
          thread_concurrency current value:10 //
          tmp_table_size current value:1048576 //臨時表的大小
          thread_stack current value:131072 //每個線程的大小
          wait_timeout current value:28800 //服務器在關閉它3之前的一個連接上等待的時間
          根據自己的需要配置以上信息會對你幫助.
          MySQL數據庫優化--SQL第三:
          1:如果你在一個數據庫中創建大量的表,那么執行打開,關閉,創建(表)的操作就會很慢. 2:MySQL(和PHP搭配之最佳組合)使用內存
          a: 關鍵字緩存區(key_buffer_size)由所有線程共享
          b: 每個連接使用一些特定的線程空間.一個棧(默認為64k,變量thread_stack),一個連接緩沖區(變量net_buffer_length)和一個結果緩沖區(net_buffer_length).特定情況下,連接緩沖區和結果緩沖區被動態擴大到max_allowed_packet.
          c:所有線程共享一個基存儲器
          d:沒有內存影射
          e:每個做順序掃描的請求分配一個讀緩沖區(record_buffer)
          f:所有聯結均有一遍完成并且大多數聯結甚至可以不用一個臨時表完成.最臨時的表是基于內存的(heap)表
          g:排序請求分配一個排序緩沖區和2個臨時表
          h:所有語法分析和計算都在一個本地存儲器完成
          i:每個索引文件只被打開一次,并且數據文件為每個并發運行的線程打開一次
          j:對每個blob列的表,一個緩沖區動態的被擴大以便讀入blob值
          k:所有正在使用的表的表處理器被保存在一個緩沖器中并且作為一個fifo管理.
          l:一個MySQL(和PHP搭配之最佳組合)admin flush-tables命令關閉所有不在使用的表并且在當前執行的線程結束時標記所有在使用的表準備關閉
          3:MySQL(和PHP搭配之最佳組合)鎖定表
          MySQL(和PHP搭配之最佳組合)中所有鎖定不會成為死鎖. wirte鎖定: MySQL(和PHP搭配之最佳組合)的鎖定原理:a:如果表沒有鎖定,那么鎖定;b否則,把鎖定請求放入寫鎖定隊列中
          read鎖定: MySQL(和PHP搭配之最佳組合)的鎖定原理:a:如果表沒有鎖定,那么鎖定;b否則,把鎖定請求放入讀鎖定隊列中
          有時候會在一個表中進行很多的select,insert操作,可以在一個臨時表中插入行并且偶爾用臨時表的記錄更新真正的表
          max_tmp_tables current value:32 //一個連接同時打開的臨時表的數量
          max_write_lock_count current value:4294967295 //指定一個值(通常很小)來啟動MySQL(和PHP搭配之最佳組合)d,使得在一定數量的write鎖定之后出現read鎖定
          net_buffer_length current value:16384 //通信緩沖區的大小--在查詢時被重置為該大小
          query_buffer_size current value:0 //查詢時緩沖區大小
          record_buffer current value:131072 //每個順序掃描的連接為其掃描的每張表分配的緩沖區的大小
          sort_buffer current value:2097116 //每個進行排序的連接分配的緩沖區的大小
          table_cache current value:64 //為所有連接打開的表的數量
          thread_concurrency current value:10 //
          tmp_table_size current value:1048576 //臨時表的大小
          thread_stack current value:131072 //每個線程的大小
          wait_timeout current value:28800 //服務器在關閉它3之前的一個連接上等待的時間
          根據自己的需要配置以上信息會對你幫助。



          上一篇:MYSQL常見錯誤提示及解決方法
          下一篇:MYSQL下生成備份表的命令的語句

          相關熱詞搜索:mysql 數據庫 優化 數據庫優化
          主站蜘蛛池模板: 国产三级三级三级| 在线观看网站黄| 久久精品视频网站| 欧美日韩a级片| 亚洲视频在线不卡| 精品国产91久久久久久久a| 国产亚洲欧美久久久久| 男女xx00动态图120秒| 国语free性xxxxxhd| yy6080新视觉旧里番高清资源| 成人黄色免费网址| 久久久久九九精品影院| 日韩夜夜高潮夜夜爽无码| 亚洲人xxx日本人18| 欧美激情videossex护士| 人人妻人人澡人人爽曰本| 精品久久久久久蜜臂a∨| 四虎国产欧美成人影院| 草莓视频色版在线观看| 国产大学生真实视频在线| 亚洲最大的黄色网| 国产精品女人呻吟在线观看| 97在线观看视频| 在线观看黄色毛片| chinese中国农村夫tube| 好男人好资源在线影视官网| 一级毛片免费的| 成人乱码一区二区三区AV| 丰满岳乱妇一区二区三区| 日本三级欧美三级人妇英文| 久久国产色av| 日韩中文精品亚洲第三区| 五月天婷婷丁香| 最近中文AV字幕在线中文| 亚洲av日韩综合一区尤物| 欧美va天堂在线电影| 亚洲乱色伦图片区小说| 欧美寡妇XXXX黑人猛交| 亚洲国产精品一区二区第四页| 欧美高清性色生活片免费观看 | 国产精品线在线精品|