mysql select用于检查条目是否存在

时间:2011-06-10 16:02:45

标签: php mysql

我有一个很大的数据库,如果一个特殊的群组中有一封电子邮件,我不得不解决这个问题 我不得不去桌子。

第一个名为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是真还是假。

但这很慢。有没有一种简单的加速方法?

3 个答案:

答案 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`);

这应该可以解决你的缓慢问题。