首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >索引列,但保持插入速度快

索引列,但保持插入速度快
EN

Stack Overflow用户
提问于 2011-05-02 02:22:22
回答 3查看 190关注 0票数 1

我需要为我的一个表中的大多数列建立索引,因为它正被具有许多过滤器的用户用于日志搜索。

这个表每秒大约有2-3次插入。我知道索引会影响表上的插入,所以这会是个问题吗?

我使用的是最新版本的MySQL (?)使用PHP5。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-02 04:31:22

有几个技巧可以用来加快插入速度

索引定义

  1. 使用整数自增列作为主键
  2. 避免唯一键
  3. 避免使用外键如果没有必要,请避免使用外键如果您必须对文本/字符串列使用keys
  4. Consider
  5. ,则只对外键使用整数字段
  6. 请勿在cardinality of your indexes中使用多列;如果有1,000,000行,但只有5个唯一值,则使用键没有多大意义。

<

插入

  1. 如果可能,在一条语句中插入5行比单独插入5行要快得多,因此,如果您可以在非索引临时表中存储日志5分钟,然后在索引表中执行insert-select操作,您将获得很大的速度。使用insert delayed.
  2. You的
  3. 可以在批量插入之前禁用索引更新,并在之后启用索引更新。在大容量插入之前执行ALTER TABLE ... DISABLE KEYS,在大容量插入之后执行ALTER TABLE ... ENABLE KEYS。这将延迟所有非惟一索引的更新,直到使用LOAD DATA INFILE完成所有插入之后;这是MySQL拥有的最快的插入机制。

维护

  1. 在您的表上使用SHOW INDEX来检查统计数据并寻找改进的机会。
  2. 定期对MyISAM、InnoDB和存档表运行OPTIMIZE TABLE

引擎的选择

使用performance.

  • Under some loads the archive storage engine can do faster inserts,进行
  1. 测试,以了解使用MyISAM作为存储引擎是否会提高测试速度。存档将只允许一个主索引,因此对您来说这不是一个选项。

在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

票数 4
EN

Stack Overflow用户

发布于 2011-05-02 02:28:00

我所能做的就是尝试一下,看看它是如何影响性能的。确保只索引那些将在搜索中使用的列,并且仅在“有意义”的情况下才在索引中包括多个列-请记住,为了使索引可用,必须在WHERE、JOIN...ON子句或order BY中引用第一列-除非满足此条件,否则不会使用索引中提到的任何后面的列。

票数 2
EN

Stack Overflow用户

发布于 2011-05-02 07:12:16

如果每秒只有2-3次插入,那么索引就不会有问题(除非有全文索引)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5850373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档