我正在编写一个带有MySQL表的应用程序,该表可以索引3列.我担心在表达到大量记录后,保存新记录的时间会很慢.请告知如何最好地接近列的索引.
UPDATE
我正在索引一个point_value,user_id和一个event_id,这些都是面向客户端所需的.对于诸如通过玩家ID和游戏ID对棒球运行进行评分的实例.在该表保存了两个赛季的记录,比如72,000次运行之后,以及在5个赛季之后,可能有25万个记录,那么每天插入大约200条新记录的成本是多少?仅用于说明,但我希望每天插入25到200条记录.
pax*_*blo 12
索引看似最合乎逻辑的东西(希望显而易见的是,例如,CUSTOMERS表中的客户ID列).
然后运行您的应用程序并定期收集统计信息以查看数据库的执行情况.关于DB2的RUNSTATS是一个例子,我希望MySQL有一个类似的工具.
当你发现一些经常运行的查询进行全表扫描(或由于其他原因花费太长时间)时,那么,只有这样,你应该添加更多的索引.优化一个月一次的午夜运行查询几乎没有什么好处,所以它可以在12:05而不是12:07结束.但是,将面向客户的查询从5秒减少到2秒(这仍然太慢,面向客户的查询应尽可能低于秒)是一项巨大的改进.
更多索引往往会减慢插入速度并加快查询速度.所以它始终是一种平衡行为.这就是为什么您只在针对问题的特定响应中添加索引的原因.其他任何事情都是过早优化,应该避免.
此外,请定期重新访问您已有的索引,以查看是否仍需要它们.可能导致您添加这些索引的查询不再经常运行以保证它.
说实话,我不相信在表上索引三列会导致你受苦,除非你打算存储大量的行:-) - 索引非常有效.
编辑后指出:
我正在为面向客户的目的索引a
point_value,theuser_id和anevent_id.对于诸如通过玩家ID和游戏ID对棒球运行进行评分的实例.在该表保存了两个赛季的记录,比如72,000次运行之后,以及在5个赛季之后,可能有25万个记录,那么每天插入大约200条新记录的成本是多少?仅用于说明,但我希望每天插入25到200条记录.
我的回答是,每天200条记录对于数据库来说是一个非常小的值,你绝对不会担心这三个索引.
就在本周,我在工作中的一个数据库表中导入了一天的交易,它包含210万条记录(我们从25台不同的机器每天至少获得一笔交易).它有四个独立的复合键,比三个单独的键更密集.
现在理所当然的,这是一个DB2数据库上,但我无法想象IBM是这么多比MySQL的人更好的是,MySQL只能处理DB2负荷小于0.01%.
nig*_*der 10
我使用我的真实项目和真正的MySql数据库进行了一些简单的测试.
我的结果是:将平均索引(索引中的1-3列)添加到表中 - 使插入速度降低2.1%.因此,如果添加20个索引,则插入速度将降低40-50%.但你的选择将快10到100倍.
那么可以添加很多索引吗? - 这取决于:)我给你我的结果 - 你决定!
没有任何选择查询,但更新,特别是插入将是较慢的量级 - 在你开始同时插入很多行之前你不会真正注意到...
事实上,在以前的雇主(单用户,桌面系统)中,我们实际上在开始"导入例程"之前删除了索引 - 在将大量记录插入同一个表之前首先删除所有记录...
然后当我们完成插入作业时,我们将重新创建索引...
通过在开始操作之前删除索引并在之后重新创建索引,我们将节省90%的时间用于此操作...
这是一个Sybase数据库,但相同的数字适用于任何数据库...
所以要小心索引,他们是"自由"的FAR ......