有兩個提示: 1.使用php讀取文件並將數據插入數據庫; 2.使用「LOAD DATA INFILE」的sql語句讀取文件並將數據插入到數據庫中。 結果是,提示一需要很多時間來完成這項工作,但提示二,它只需要幾秒鐘完成。 所以問題是,這兩個技巧有什麼區別? 這是關於php和sql的基本設計或理論原理嗎? 如果是,那是什麼?php和sql的區別?
回答
我找到答案semiliar的問題在這裏: https://dba.stackexchange.com/questions/16809/why-is-load-data-infile-faster-than-normal-insert-statements
PHP使用INSERT語句將數據添加到數據庫,並使用它addential層連接到數據庫。它會產生延遲。
SQL插入沒有更快,在PHP中,因爲它不需要addential層。最後在上面描述的問題中,爲什麼LOAD DATA INFILE
更快INSERT
好吧,我現在正在看。 – James
這取決於你如何做PHP版本。這裏有幾個選項,每個選項都具有不同的性能級別。
通過像Doctrine或 Propel的ORM去會給你很多在每個記錄控制,並會公開一個友好的界面,但它是最慢的方法。每條記錄通常都經過驗證,所以您確實擁有這種安全性,但是如果數據已經知道,那麼有更好的方法。
使用由您的ORM或通過類似PDO提供的原始數據庫適配器通常速度更快,尤其是如果您可以使用準備好的語句並使用不同的數據值重複執行相同的INSERT
語句。
最有效的PHP驅動的方法是構造一個帶有多個值集的大型INSERT
語句,即所謂的「多插入」,它通常每次以1000或更多行的塊形式添加數據,具體取決於每一行都很大。通過正確的服務器調整,這樣的性能可能會非常接近最佳狀態,在這種情況下,您可能會付出30-50%的懲罰,而不是理論上最快的懲罰。有時候這是一個合理的折衷。
LOAD DATA INFILE
方法將永遠是最快的,因爲MySQL有一些內部優化來處理它。這確實要求您直接在數據庫服務器上以可讀的格式存儲文件,因此它也是最受限制的。您還負責確保數據正確並適合您的架構,否則可能會發生無意中截斷。沒有數據驗證完成,無效的日期可能會導致問題,如0000-00-00
。
因此,所有這些方法都視情況而定。如果您需要速度,LOAD DATA
方法將始終最快,但這不是沒有風險。
從公式中刪除PHP可減少開銷。在磁盤上使用文件可以避免網絡堆棧和MySQL網絡協議的開銷。這兩種方法的成本相當低,所有事情都考慮到了,但是它們非常重要,特別是當您試圖在裝備快速運行的系統上插入大量數據時。
在第一種方法中,php代碼將驗證它將要插入的每個值(即,e)如果要插入數字值,將檢查它是否是純數字(取決於所用腳本中的編程邏輯)
正如您在提示中提到的那樣,如果它將要插入到數據庫中,必須獲得與數據庫的連接。 得到連接後,它必須執行語句(上述解析將發生在數據庫服務器(根據數據庫服務器的編碼邏輯),這增加了開銷)
Php將等待每一個插入語句發送到數據庫服務器(如果它是您的插入算法)。它是應用服務器到數據庫服務器到應用服務器邏輯,它增加了一些更多的延遲。
在DB服務器的情況下,它僅僅是中插入任何數量多所以應該早於PHP
- 1. SQL和PL-SQL的區別
- 2. JSON和SQL的區別
- 3. SQL中'AND'和'&&'的區別
- 4. mcrypt和openssl的PHP區別?
- 5. PHP中「:」和「。」的區別?
- 6. PHP:$ _ENV和$ GLOBALS的區別
- 7. Javascript和PHP的區別
- 8. oracle sql和pl/sql中varchar2的區別
- 9. SQL的區別
- 10. php 4和php 5之間的區別?
- 11. Php分頁和MYSQL區別
- 12. PHP真和'真'區別
- 13. php cli和php cgi有什麼區別?
- 14. php 4和php 5有什麼區別?
- 15. 'OR'和'||'之間的區別在SQL中?
- 16. SQLite和SQL的區別是什麼
- 17. PDO:rowCount()和SQL COUNT(col)之間的區別
- 18. TeraData SQL中「TOP」和「SAMPLE」的區別
- 19. .SQL和.DUMP文件之間的區別
- 20. Apache Spark SQL和MongoDB之間的區別?
- 21. SQL - COALESCE和ISNULL之間的區別?
- 22. SQL查詢中的區別和連接?
- 23. Sql連接和OLEDB連接的區別
- 24. GEOMETRY和GEOGRAPHY的區別SQL Server 2008
- 25. SQL中的「LIKE」和「=」有什麼區別?
- 26. PROC SQL和sqldf之間的區別
- 27. PHP中的對象和類的區別?
- 28. * .php和* .html文件之間的區別
- 29. PHP中cURL和SOAP之間的區別?
- 30. require和require_once之間的區別在php
的PHP的版本是5.3,而數據庫的類型是MySQL和5.5版本。 – James