我有一个程序,每天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秒。
我的问题如何优化这个?那么插入和选择可以同时使用数据库而不会减慢速度吗?
答案 0 :(得分:1)
SHOW CREATE TABLE
。 DROP
任何不必要的索引;这将加快LOAD
。答案 1 :(得分:0)
好吧,首先你应该确保你正确地索引了你的桌子。见How does database indexing work?
这将大大加快select语句的速度。
其次,您可能将文件拆分为多个块。因此,数据库服务器会删除您加载的每个新文件的缓存和日志。