我有大約800,000行數據存儲在數據庫的boost共享內存中。的數據是在以下形式:數據檢索和索引
Id Color Length Size
1 1 2 4
2 3 4 5
3 2 2 0
4 1 2 4......and so on
的顏色可以是從1-12的值的長度1-4和大小1-5, 編號,長度,顏色,大小被存儲在單獨的載體共享內存中的大小爲800,000。所以有Id的Id向量,Color的顏色向量等等。
我想在執行一些計算之前過濾數據。所以我想要的數據顏色是1,長度是2和大小4,即行1和4在上面的情況。有沒有任何有效的方法來過濾數據,而不使用for循環並遍歷所有800,000圖像並檢查條件?
現在我只是使用mysql語句來獲取滿足條件的數據的Ids。
"select Id from features_table where Color=1 and Length=2 and Size =4"
但是有沒有更快的方法來做到這一點?或者我應該堅持這種方法?我正在尋找更快的方法,因此我不確定從數據庫中獲取Ids是否會增加算法的執行時間。
在這種情況下,我可以考慮的其他選擇是什麼?我讀了關於哈希表,B樹,二進制搜索樹和我很困惑這適合這種情況。在這種情況下kd-tree會有幫助嗎?因爲許多圖像可能具有相同的顏色,長度和大小組合。我不確定kd-tree是否正確。我讀過關於用於kd-tree的opencv中的FLANN是否有任何示例或資源在這種情況下可能會有所幫助?還是有任何內置的C++庫?
也許考慮調整MySQL參數。索引是否被使用?這個查詢是一個*精確匹配*,位圖索引應該加速的很好。如果MySQL支持這樣的事情。 –