最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

提高MySQL中數(shù)據(jù)裝載效率

 更新時間:2009年11月02日 16:59:10   作者:  
很多時候關心的是優(yōu)化SELECT 查詢,因為它們是最常用的查詢,而且確定怎樣優(yōu)化它們并不總是直截了當。
相對來說,將數(shù)據(jù)裝入數(shù)據(jù)庫是直截了當?shù)?。然而,也存在可用來改善?shù)據(jù)裝載操作效率的策略,其基本原理如下:

成批裝載較單行裝載更快,因為在裝載每個記錄后,不需要刷新索引高速緩存;可在成批記錄裝入后才刷新。

在表無索引時裝載比索引后裝載更快。如果有索引,不僅必須增加記錄到數(shù)據(jù)文件,而且還要修改每個索引以反映增加了的新記錄。

較短的SQL 語句比較長的SQL 語句要快,因為它們涉及服務器方的分析較少,而且還因為將它們通過網(wǎng)絡從客戶機發(fā)送到服務器更快。這些因素中有一些似乎微不足道(特別是最后一個因素),但如果要裝載大量的數(shù)據(jù),即使是很小的因素也會產(chǎn)生很大的不同結果。我們可以利用上述的一般原理推導出幾個關于如何最快地裝載數(shù)據(jù)的實際結論:

LOAD DATA(包括其所有形式)比INSERT 效率高,因為其成批裝載行。索引刷新較少,并且服務器只需分析和解釋一條語句而不是幾條語句。

LOAD DATA 比LOAD DATA LOCAL 效率更高。利用LOAD DATA,文件必須定位在服務器上,而且必須具有FILE 權限,但服務器可從磁盤直接讀取文件。利用LOAD DATA LOCAL,客戶機讀取文件并將其通過網(wǎng)絡發(fā)送給服務器,這樣做很慢。

如果必須使用INSERT,應該利用允許在單個語句中指定多行的形式,例如:

可在語句中指定的行越多越好。這樣會減少所需的語句數(shù)目,降低索引刷新量。如果使用mysqldump 生成數(shù)據(jù)庫備份文件,應該使用--extended-insert 選項,使轉儲文件包含多行INSERT 語句。還可以使用- - o p t(優(yōu)化) ,它啟用--extended-insert 選項。反之,應該避免使用mysqldump 的--complete-insert 選項;此選項會導致INSERT 語句為單行,執(zhí)行時間更長,比不用--complete-insert 選項生成的語句需要更多的分析。

使用壓縮了的客戶機/服務器協(xié)議以減少網(wǎng)絡數(shù)據(jù)流量。對于大多數(shù)MySQL客戶機,可以用--compress 命令行選項來指定。它一般只用于較慢的網(wǎng)絡,因為壓縮需要占用大量的處理器時間。

讓MySQL插入缺省值;不要在INSERT 語句中指定將以任意方式賦予缺省值的列。平均來說,這樣做語句會更短,能減少通過網(wǎng)絡傳送給服務器的字符數(shù)。此外,語句包含的值較少,服務器所進行的分析和轉換就會較少。

如果表是索引的,則可利用批量插入( LOAD DATA 或多行的INSERT 語句)來減少索引的開銷。這樣會最小化索引更新的影響,因為索引只需要在所有行處理過時才進行刷新,而不是在每行處理后就刷新。

如果需要將大量數(shù)據(jù)裝入一個新表,應該創(chuàng)建該表且在未索引時裝載,裝載數(shù)據(jù)后才創(chuàng)建索引,這樣做較快。一次創(chuàng)建索引(而不是每行修改一次索引)較快。

如果在裝載之前刪除或禁用索引,裝入數(shù)據(jù)后再重新創(chuàng)建或啟用索引可能使裝載更快。如果想對數(shù)據(jù)裝載使用刪除或禁用策略,一定要做一些實驗,看這樣做是否值得(如果將少量數(shù)據(jù)裝入一個大表中,重建和索引所花費的時間可能比裝載數(shù)據(jù)的時間還要長)。

可用DROP INDEX 和CREATE INDEX 來刪除和重建索引。另一種可供選擇的方法是利用myisamchk 或isamchk 禁用和啟用索引。這需要在MySQL服務器主機上有一個帳戶,并對表文件有寫入權。為了禁用表索引,可進入相應的數(shù)據(jù)庫目錄,執(zhí)行下列命令之一:

對具有.MYI 擴展名的索引文件的MyISAM 表使用myisamchk,對具有.ISM 擴展名的索引文件的ISAM 表使用isamchk。在向表中裝入數(shù)據(jù)后,按如下激活索引:

如果決定使用索引禁用和激活,應該使用第13章中介紹的表修復鎖定協(xié)議以阻止服務器同時更改鎖(雖然此時不對表進行修復,但要對它像表修復過程一樣進行修改,因此需要使用相同的鎖定協(xié)議)。

上述數(shù)據(jù)裝載原理也適用于與需要執(zhí)行不同操作的客戶機有關的固定查詢。例如,一般希望避免在頻繁更新的表上長時間運行SELECT 查詢。長時間運行SELECT 查詢會產(chǎn)生大量爭用,并降低寫入程序的性能。一種可能的解決方法為,如果執(zhí)行寫入的主要是INSERT 操作,那么先將記錄存入一個臨時表,然后定期地將這些記錄加入主表中。如果需要立即訪問新記錄,這不是一個可行的方法。但只要能在一個較短的時間內不訪問它們,就可以使用這個方法。使用臨時表有兩個方面的好處。首先,它減少了與主表上SELECT 查詢語句的爭用,因此,執(zhí)行更快。其次,從臨時表將記錄裝入主表的總時間較分別裝載記錄的總時間少;相應的索引高速緩存只需在每個批量裝載結束時進行刷新,而不是在每行裝載后刷新。這個策略的一個應用是進入Web 服務器的Web 頁訪問MySQL數(shù)據(jù)庫。在此情形下,可能沒有保證記錄立即進入主表的較高權限。

如果數(shù)據(jù)并不完全是那種在系統(tǒng)非正常關閉事件中插入的單個記錄,那么減少索引刷新的另一策略是使用MyISAM 表的DELAYED_KEY_WRITE 表創(chuàng)建選項(如果將MySQL用于某些數(shù)據(jù)錄入工作時可能會出現(xiàn)這種情況)。此選項使索引高速緩存只偶爾刷新,而不是在每次插入后都要刷新。

如果希望在服務器范圍內利用延遲索引刷新,只要利用--delayed-key-write 選項啟動mysqld 即可。在此情形下,索引塊寫操作延遲到必須刷新塊以便為其他索引值騰出空間為止,或延遲到執(zhí)行了一個flush-tables 命令后,或延遲到該索引表關閉。

相關文章

  • 將數(shù)據(jù)插入到MySQL表中的詳細教程

    將數(shù)據(jù)插入到MySQL表中的詳細教程

    這篇文章主要介紹了將數(shù)據(jù)插入到MySQL表中的詳細教程,文中給出了在PHP腳本中操作的示例,是MySQL入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • 一個字段同時滿足多個條件的查詢

    一個字段同時滿足多個條件的查詢

    當一個字段需要同時等于多個值的時候,用and直接連不會有數(shù)據(jù)查出。
    2011-08-08
  • 解決Navicat導入數(shù)據(jù)庫數(shù)據(jù)結構sql報錯datetime(0)的問題

    解決Navicat導入數(shù)據(jù)庫數(shù)據(jù)結構sql報錯datetime(0)的問題

    這篇文章主要介紹了解決Navicat導入數(shù)據(jù)庫數(shù)據(jù)結構sql報錯datetime(0)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 詳解如何利用Xtrabackup進行mysql增量備份

    詳解如何利用Xtrabackup進行mysql增量備份

    這篇文章主要為大家介紹了如何利用Xtrabackup進行mysql增量備份詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • linux下mysql 5.1 和 5.7的安裝教程

    linux下mysql 5.1 和 5.7的安裝教程

    下面小編就為大家分享一篇linux下mysql 5.1 和 5.7的安裝教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Mysql InnoDB的鎖定機制實例詳解

    Mysql InnoDB的鎖定機制實例詳解

    這篇文章主要給大家介紹了關于Mysql InnoDB的鎖定機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 分享MySQL?主從延遲與讀寫分離的七種解決方案

    分享MySQL?主從延遲與讀寫分離的七種解決方案

    這篇文章主要介紹了分享MySQL?主從延遲與讀寫分離的七種解決方案,常見的解決方式是分庫分表,每次讀寫都是操作主庫的一個分表,從庫只用來做數(shù)據(jù)備份。當主庫發(fā)生故障時,主從切換,保證集群的高可用性,下面詳細的相關資料介紹,需要的小伙伴可以參考一下
    2022-03-03
  • MySQL?字符串轉換為數(shù)字的方法小結

    MySQL?字符串轉換為數(shù)字的方法小結

    這篇文章主要介紹了MySQL字符串轉換為數(shù)字的幾種方法,本文給大家列列舉了三種方法,每種方法通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • mysql如何查詢當前數(shù)據(jù)庫中不為空的表

    mysql如何查詢當前數(shù)據(jù)庫中不為空的表

    這篇文章主要介紹了mysql如何查詢當前數(shù)據(jù)庫中不為空的表問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • MySQL數(shù)據(jù)同步出現(xiàn)Slave_IO_Running:?No問題的解決

    MySQL數(shù)據(jù)同步出現(xiàn)Slave_IO_Running:?No問題的解決

    本人最近工作中遇到了Slave_IO_Running:NO報錯的情況,通過查找相關資料終于解決了,下面這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)同步出現(xiàn)Slave_IO_Running:?No問題的解決方法,需要的朋友可以參考下
    2023-05-05

最新評論

都江堰市| 津南区| 永顺县| 龙里县| 龙里县| 新余市| 綦江县| 巴林左旗| 河津市| 游戏| 永福县| 藁城市| 调兵山市| 丰宁| 互助| 龙南县| 达孜县| 忻城县| 四平市| 龙海市| 太保市| 阜平县| 遵义县| 马关县| 遵义市| 博白县| 阿拉善右旗| 临猗县| 洱源县| 陇川县| 瑞安市| 香港 | 剑河县| 博湖县| 都昌县| 肃宁县| 自贡市| 建阳市| 天津市| 福安市| 怀集县|