我有一个很大的数据库,如果一个特殊的群组中有一封电子邮件,我不得不解决这个问题 我不得不去桌子。
第一个名为user的用户
CREATE TABLE user (
uid int(10) NOT NULL AUTO_INCREMENT,
kid int(3) NOT NULL,
Email varchar(255) DEFAULT NULL,
PRIMARY KEY (uid),
KEY kid (kid)
) ENGINE=MyISAM
和一个名为group
的表CREATE TABLE `group` (
`vuid` int(10) NOT NULL AUTO_INCREMENT,
`uid` int(3) NOT NULL,
`vid` int(3) NOT NULL,
PRIMARY KEY (`vuid`)
) ENGINE=MyISAM
并且对于每个插入,我都有一个已定义的视频和电子邮件 现在我必须检查,如果具有uid的用户在组vid中。
select a.email,b.vuid from user a, group b where a.email=\''.$email.'\' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid limit 1')
并检查mysql_fetch_assoc是真还是假。
但这很慢。有没有一种简单的加速方法?
答案 0 :(得分:2)
不要使用以逗号分隔的表格列表,而是尝试使用JOIN
(在这种情况下,INNER JOIN
是您最好的选择,因为您要检查两个表中是否存在记录) {1}}条款。我已经格式化了您的查询,我的更改是大写的,以使它们脱颖而出。
ON
接下来,检查索引 - 确保b.uid和a.kid上有索引。作为一般规则,请检查您可以索引的值的where子句;具有独特价值的任何东西都是候选人。
答案 1 :(得分:1)
如果速度很慢,您可能会在查阅列或外键列上缺少索引。
答案 2 :(得分:1)
执行:
ALTER TABLE `group` ADD INDEX `uid`(uid);
ALTER TABLE `user` ADD INDEX `email`(`Email`);
这应该可以解决你的缓慢问题。