性能问题:加载数据infile使选择查询变慢

时间:2016-04-07 02:00:12

标签: php mysql performance yii

我有一个程序,每天24小时扫描twitter,facebook,google +。每个用户正在运行并插入一个搜索列表(一次100个结果,函数在一个循环中运行,直到没有进一步的结果)

Yii::app()->db->createCommand(
     "LOAD DATA INFILE '/var/tmp/inboxli_user".$user.".txt'
      INTO TABLE inbox
      FIELDS TERMINATED BY ',$%'
      LINES STARTING BY 'thisisthebeginningxxx'
          (created_on, created_at, tweet, tweet_id, profile_image,
           twitter_user_id, screenname, followers, lang, tags, type,
           positive_score, readme, answered, deleted, searchlist_id,
           handled_by, used_as_newsitem,  user_id)
     "                       )->execute();

进入数据库以便在服务器上保持尽可能小的负载。然而,当我的函数进行批量插入时,我的select函数运行速度非常慢。通常,收件箱在1.5秒内加载,但是当插入运行时,有时页面打开需要20秒。

我的问题如何优化这个?那么插入和选择可以同时使用数据库而不会减慢速度吗?

2 个答案:

答案 0 :(得分:1)

  • 离开MyISAM!使用InnoDB;它可以更好地避免锁定其他行为。
  • 加载数据非常有效,将计数增加到500。
  • 你有什么指数?我们来看SHOW CREATE TABLEDROP任何不必要的索引;这将加快LOAD
  • 请考虑关闭查询缓存。

答案 1 :(得分:0)

好吧,首先你应该确保你正确地索引了你的桌子。见How does database indexing work?

这将大大加快select语句的速度。

其次,您可能将文件拆分为多个块。因此,数据库服务器会删除您加载的每个新文件的缓存和日志。

请参阅:https://www.percona.com/blog/2008/07/03/how-to-load-large-files-safely-into-innodb-with-load-data-infile/