我在我的MySQL數據庫,用戶和微博兩個表,如下:如何加快MySQL數據庫/查詢?
TABLE users (
uid int(7) NOT NULL AUTO_INCREMENT,
twitter_uid int(10) NOT NULL,
screen_name varchar(255) NOT NULL,
`name` varchar(255) NOT NULL,
tweets int(6) NOT NULL,
followers_count int(7) NOT NULL,
statuses_count int(7) NOT NULL,
created_at int(10) NOT NULL,
PRIMARY KEY (uid)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
TABLE tweets (
tweet_id int(11) NOT NULL AUTO_INCREMENT,
`query` varchar(5) NOT NULL,
id_str varchar(18) NOT NULL,
created_at int(10) NOT NULL,
from_user_id int(11) NOT NULL,
from_user varchar(256) NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (tweet_id),
KEY id_str (id_str)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
的鳴叫表包含了超過200萬的記錄。我已將唯一用戶(來自tweets.from_user)放入用戶表中。它現在包含94,100個用戶。我現在要算微博每個用戶提出的數量,如下(PHP):
res = db_query('SELECT uid, screen_name FROM users WHERE tweets = 0 LIMIT 150');
while ($user = db_fetch_object($result)) {
$res2 = db_query(
"SELECT COUNT(tweet_id) FROM tweets WHERE from_user = '%s'",
$user->screen_name
);
$cnt = db_result($result2);
db_query("UPDATE users SET tweets = %d WHERE uid = %d", $cnt, $user->uid);
}
此代碼然而,極其緩慢。計算150個用戶的推文需要大約5分鐘的時間。按照這個速度,對於所有用戶來說完成這個任務大概需要3天的時間。
我的問題是 - 我必須在這裏丟失一些東西。也許有更高效的查詢可能,或者我應該改變一些數據庫結構?任何幫助將不勝感激:)
查看Quassnoi的網站http://explainextended.com,看他的例子,也許問他 – david