我正在爲我的老闆寫一個小工具,要求我從FedEx平面文件中提取記錄,然後從我們的ERP中獲取訂單數據。我遇到了一個嚴重的瓶頸,那就是當我通過PHP運行時,我的查詢花費的時間超過了5秒,我正在向集體尋求幫助。在PHP/PDO中顯着延長MSSQL查詢
應用OS:LAMP服務器W/PHP 5.3.2 DB:的Microsoft SQL Server 2008 R2
一旦我搶的發票,它給了我與發票相關聯的所有的訂單號碼。這些幾乎都是非順序的,而較大的發票可以有多達3,000個訂單號。
實施例: SELECT o.ORDER_NO, o.TRANSACTION_ID, o.SHIP_DATE, o.SHIP_CHRG, s.TRANSACTION_ID, s.ACTUAL_WGHT, s.PACKER, s.SHIP_DEPARTMENT, s.TRACKER_ID FROM o INNER JOIN s ON o.TRANSACTION_ID = s.TRANSACTION_ID AND o.ORDER_NO IN (86965,93616,93357,89475,90252,90249,93674,94029,88340,93044,89267,87340...)
上面的例子有2744個ORDER_NOs它需要抓住。如果我跳到我的Windows客戶端並使用管理工作室,它會在超過半秒(274995字節)內返回結果。如果我在PHP中執行它,則需要5.5到6秒。
我通常使用PDO dblib來訪問我的外星人數據庫,我試過直接查詢並準備好沒有改變的執行。我甚至在PHP中使用內置的mssql函數嘗試了代碼,沒有任何效果。
有什麼我失蹤,會讓我得到這個時間?我的執行計劃在數據庫服務器上看起來不錯,所以我非常認爲這是PHP的一個問題。
在此先感謝您提供的所有幫助!
PDO的開銷相當小。你有沒有看過那5-6秒的實際花費在等待MySQL和PHP開銷多少? – 2012-01-31 15:34:07
這絕對是一種可能性。我使用了debugDumpParams,並對我的查詢進行了microtiming,但是我不知道該如何監控它。 – VSack 2012-01-31 15:41:17
我的另一個想法是,PHP以某種方式發送不同的查詢,當它在一個IN列表中。 – VSack 2012-01-31 15:41:58