我需要索引表中的大部分列,因爲它用於具有大量過濾器的用戶的日誌搜索。索引列但保持插入快速
這張表格每秒大約有2-3個插入。我知道索引影響在表上插入,所以這會成爲一個問題?
我使用的是最新版本的MySQL(?)與PHP 5
感謝。
我需要索引表中的大部分列,因爲它用於具有大量過濾器的用戶的日誌搜索。索引列但保持插入快速
這張表格每秒大約有2-3個插入。我知道索引影響在表上插入,所以這會成爲一個問題?
我使用的是最新版本的MySQL(?)與PHP 5
感謝。
有,你可以用它來加快插入
指數定義
插入
ALTER TABLE ... DISABLE KEYS
,在批量插入後執行ALTER TABLE ... ENABLE KEYS
。這將延遲所有非唯一索引的更新,直到所有插入完成。LOAD DATA INFILE
;這是MySQL擁有的最快的插入機制。維護你的表來檢查統計,尋找改進機會
SHOW INDEX
。OPTIMIZE TABLE
。發動機的選擇
退房的回答以下幾個問題上的SO:
How to optimize mysql indexes so that INSERT operations happen quickly on a large table with frequent writes and reads?
are MySQL INSERT statements slower in huge tables?
Mysql InnoDB performance optimization and indexing
我只能嘗試一下,看看它是如何影響性能的。確保您只索引將用於搜索的那些列,並且如果「這是合理的」,則只在索引中包含多個列 - 請記住,要使索引可用,第一列必須是在WHERE,JOIN ... ON子句或ORDER BY中引用 - 除非滿足此條件,否則不會使用索引中提到的任何後一列。
對不起,你是什麼意思的第一列?如果這就是你的意思,我只會索引我在where/order中使用的列。 – webnoob 2011-05-01 19:17:02
我認爲威爾指的是使用複合索引或多列索引 – 2011-05-01 19:41:10
@Mark,@Webnoob - 是的,正是如此。我已經看到了幾個數據庫新手的例子,假設索引中字段的順序無關緊要。 – 2011-05-02 17:43:28
如果你只得到了每秒2-3插入,有將與你的指標沒有問題(除非有FULLTEXT索引)。
最新的MySQL是什麼? 5.0,5.1,5.5,5.6?哪個存儲引擎MyISAM,InnoDB,Archive。順便說一句,我建議使用黑洞存儲,非常快的插入:-) – Johan 2011-05-01 20:36:44