2013-03-21 59 views
4

o我有一張擁有2百萬個寄存器的表,但它的增長速度會更快。基本上這個表格包含具有各自描述符的圖像的興趣點。當我試圖執行查詢時,選擇查詢點的空間位置附近的點時,總執行時間會過長。更精確的持續時間/取數= 0.484秒/27.441秒。查詢非常簡單,只返回約17000行。MySQL獲取時間優化

我的查詢是:

SELECT fp.fingerprint_id, fp.coord_x, fp.coord_y, fp.angle, 
fp.desc1, fp.desc2, fp.desc3, fp.desc4, fp.desc5, fp.desc6, fp.desc7, fp.desc8, fp.desc9, fp.desc10, 
fp.desc11, fp.desc12, fp.desc13, fp.desc14, fp.desc15, fp.desc16, fp.desc17, fp.desc18, fp.desc19, 
fp.desc20, fp.desc21, fp.desc22, fp.desc23, fp.desc24, fp.desc25, fp.desc26, fp.desc27, fp.desc28, 
fp.desc29, fp.desc30, fp.desc31, fp.desc32 
FROM fingerprint fp 
WHERE 
fp.is_strong_point = 1 AND 
(coord_x BETWEEN 193-40 AND 193+40) AND (coord_y BETWEEN 49-15 AND 49+15) 
LIMIT 1,1000000; 

這就是我所做的。

  1. 我試圖改變key_buffer_sizemy.ini,但沒有看到太多的變化。
  2. 此外,我試圖設置coord_x和coord_y作爲索引,但查詢時間變慢了。
  3. 該表由coord_x字段的範圍分區,這給了我更好的結果。

我該如何縮短取時間?是否有可能將其減少到毫秒?

回答

0

如果我是正確的,查詢速度非常快,但是從數據庫中獲取數據的速度很慢。從存儲中加載170000個結果需要27秒的時間。

它看起來像你使用錯誤的數據庫類型。嘗試將表從一個數據庫引擎切換到另一個。

爲了獲得最大速度,您可以使用MEMORY引擎。唯一的缺點是,如果必須對其進行動態更改,則必須將該表的副本存儲在另一個引擎中,並且在任何更改之後,必須重新裝載差異或整個表。

而且你會在重新啓動服務器,以使該觸發一個腳本,這樣你的記憶表將在你的MySQL服務器

See here for the doc

+0

我知道在Oracle中它應該更快,但我必須在這個項目中使用MySQL。我在想在MySQL配置中可能會有一些技巧?感謝您的回答。 – andriy 2013-03-21 12:21:41

+0

@Andriy我希望你也知道MySQL也可以使用多個數據庫引擎。 MyISAM和innodb,例如... – ITroubs 2013-03-21 12:22:49

+0

@Andriy如果你使用的是像phpmyadmin這樣的工具,那麼你將能夠看到你的表使用的是什麼樣的數據庫引擎。 – ITroubs 2013-03-21 12:24:20

8

的啓動我面臨緩慢獲取問題太(MySQL的加載,InnoDB)。 最後我發現innodb_buffer_pool_size在我的系統中默認設置爲8MB,這不足以處理查詢。它增加至1GB後,性能似乎罰款:

    Duration/Fetch 
353 row(s) returned 34.422 sec/125.797 sec (8MB innodb buffer) 
353 row(s) returned 0.500 sec/1.297 sec (1GB innodb buffer) 

UPDATE:

要改變innodb_buffer_pool_size添加到您的my.cnf

innodb_buffer_pool_size=1G 

重新啓動你的mysql,使其影響

參考:How to change value for innodb_buffer_pool_size in MySQL on Mac OS?