我需要索引其中一个表中的大多数列,因为它被用于具有大量过滤器的用户进行日志搜索。
这张表每秒约有2-3个插页。我知道索引会影响表上的插入,所以这会有问题吗?
我使用最新版本的MySQL(?)和PHP 5。
感谢。
答案 0 :(得分:4)
您可以使用一些技巧来加速插入
索引定义
<强>插入强>
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
答案 1 :(得分:2)
我所能建议的只是试一试,看看它如何影响性能。确保您只索引将在搜索中使用的那些列,并且如果“有意义”,则仅在索引中包含多个列 - 请记住,为了使索引可用,第一列必须是在WHERE,JOIN ... ON子句或ORDER BY中引用 - 除非满足此条件,否则不会使用索引中提到的任何后面的列。
答案 2 :(得分:0)
如果每秒只有2-3个INSERT,那么索引就没有问题(除非有FULLTEXT索引)。