我在本地機器上運行java程序的MYSQL數據庫。與訪問mysql數據庫中的相同數據相比,訪問java列表(arraylist)更快嗎?
我打算創建一個特定表的所有條目的數組列表。從這一點上我不會訪問數據庫來獲取表中的特定條目,而是使用創建的數組列表。與訪問數據庫以獲取表中的特定條目相比,這會更快還是更慢?
請注意,我感興趣的表格有大約200萬個條目。
謝謝。
更多信息:我只需要兩個字段。 1類型爲Long,1爲String類型。該表的索引是Long,而不是int。
我在本地機器上運行java程序的MYSQL數據庫。與訪問mysql數據庫中的相同數據相比,訪問java列表(arraylist)更快嗎?
我打算創建一個特定表的所有條目的數組列表。從這一點上我不會訪問數據庫來獲取表中的特定條目,而是使用創建的數組列表。與訪問數據庫以獲取表中的特定條目相比,這會更快還是更慢?
請注意,我感興趣的表格有大約200萬個條目。
謝謝。
更多信息:我只需要兩個字段。 1類型爲Long,1爲String類型。該表的索引是Long,而不是int。
不,它會慢得多,因爲要在ArrayList中查找元素,您必須按順序掃描ArrayList,直到找到元素。
由於沒有連接開銷,但有了兩百萬個條目,只要您創建了正確的索引,MySQL就會取勝,它可能會更快一些。只檢索每次您實際需要的行。
你爲什麼想這麼做?你遇到緩慢的查詢?
爲了找到答案,請在my.cnf中通過取消註釋(或添加)以下行來激活慢查詢日誌。
# Here you can see queries with especially long duration
log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 1
然後看看哪個查詢需要很長的時間,並與前EXPLAIN運行它們,可以考慮增加指數在解釋命令告訴您未使用索引,或者只是張貼您的CREATE TABLE新問題語句和示例查詢進行優化。
這取決於您將如何處理數據。如果您只需要幾行,則只能從數據庫中獲取這些行。如果你知道你需要所有的數據,那麼繼續並將整個表加載到Java中,如果它可以適應內存。你會用它做什麼?序列或隨機閱讀?數據會被改變嗎?取決於如何使用集合,Map或Set可能是更快的替代方案。
這個問題太模糊,而且可以輕鬆地去依賴於任何一種方式:
例如,如果每條記錄包含一對字節的數據,則將它們全部存儲在內存中(不一定是ArrayList)要快得多。例如,您可能想要將它們放入TreeSet中。
什麼樣的訪問方式意味着什麼?我正在使用TABLE – rana
中的select field1,field2您是要根據用戶輸入字符串搜索1條記錄,還是要按順序遍歷所有記錄(即更新股票價格)。 –
此外,如果基於文本的搜索是你在做什麼,那麼我建議使用像Lucene這樣的東西來索引文本字段,這使得查詢比查詢更快。 –
無論是更快還是更慢都是可衡量的。時間吧。與存儲在磁盤上的數據表一起使用處理存儲在內存中的結構肯定更快。那就是如果你有足夠的內存,並且你沒有20個用戶同時運行相同的進程。
您如何訪問數據?你有一個整數索引?
我沒有整數索引。指數是長 – rana
它是一樣的!如果它是連續的,你可以通過這個索引來訪問你的ArrayList。如果不考慮使用HashTable。 –
首先,訪問數組列表要比訪問數據庫快得多。訪問內存比訪問硬盤要快得多。 如果數組中的條目數很大,我想是這樣的,那麼你需要考慮使用「直接訪問」數據結構,比如HashMap,它將作爲一個數據庫表,其中你的鍵的引用值爲
謝謝。我會接受你的回答:),顯然我必須等待10分鐘才能接受你的回答-_-' – rana
給別人留下時間,他們可以給出更好的答案。 [閱讀](http://dev.mysql.com/doc/refman/5.5/en/mysql-indexes.html)瞭解爲什麼MySQL比逐行掃描更快,特別是在大型表格上。 – stivlo
我正在考慮這樣做,因爲該程序需要很長時間才能完成。大約6個小時。 – rana