Php mysql选择用于检查条目是否存在
我有一个很大的数据库,如果一封邮件在一个特殊的组中,我必须检查它 我不得不坐在桌子上 第一个tabel称为userPhp mysql选择用于检查条目是否存在,php,mysql,Php,Mysql,我有一个很大的数据库,如果一封邮件在一个特殊的组中,我必须检查它 我不得不坐在桌子上 第一个tabel称为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
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中
从用户a、组b中选择a.email、b.vuid,其中a.email=\'.$email.'\'和a.kid='$孩子。“和b.vid=”$维德a.uid=b.uid limit 1')
并检查mysql_fetch_assoc是否为true或false
但这非常缓慢。有没有简单的加速方法?如果速度慢,则可能是查找列或外键列上缺少索引 如果速度慢,则查找列或外键列上可能缺少索引 不要使用逗号分隔的表列表,而是尝试使用带有
ON
子句的连接(在本例中,这是最好的选择,因为您希望检查两个表中是否存在记录)。我已将您的查询格式化,我的更改以大写字母表示,以使其突出
select
a.email,
b.vuid
from
user a
INNER JOIN group b
ON a.uid = b.uid
where
a.email=\''.$email.'\'
and a.kid=' . $kid.'
and b.vid=' . $vid . '
limit 1
接下来,检查索引-确保在b.uid和a.kid上有索引。一般来说,检查where子句中可以索引的值;任何具有唯一值的都是候选项。不要使用逗号分隔的表列表,而是尝试使用带有ON
子句的联接(在这种情况下,这是最好的选择,因为您希望检查两个表中是否存在记录)。我已将您的查询格式化,我的更改以大写字母表示,以使其突出
select
a.email,
b.vuid
from
user a
INNER JOIN group b
ON a.uid = b.uid
where
a.email=\''.$email.'\'
and a.kid=' . $kid.'
and b.vid=' . $vid . '
limit 1
接下来,检查索引-确保在b.uid和a.kid上有索引。一般来说,检查where子句中可以索引的值;任何具有唯一值的对象都是候选对象。请执行以下操作:
ALTER TABLE `group` ADD INDEX `uid`(uid);
ALTER TABLE `user` ADD INDEX `email`(`Email`);
这将解决您的速度缓慢问题。请执行以下操作:
ALTER TABLE `group` ADD INDEX `uid`(uid);
ALTER TABLE `user` ADD INDEX `email`(`Email`);
这将修复您的速度慢。任何用作外键的列都应定义为与外键表中的键相同,并具有索引。这样Mysql可以快速处理连接。如果您不这样做,它将不得不使用较慢的表扫描方法来加入表。:-/您能帮助我吗?像ALTER TABLE group ADD FOREIGN KEY(uid)REFERENCES user(uid)??您不需要添加外键约束,只需要添加索引。我必须重新启动数据库吗?因为它更快。。。think Slower任何用作外键的列都应定义为与外键表中的键相同的列,并具有索引。这样Mysql可以快速处理连接。如果您不这样做,它将不得不使用较慢的表扫描方法来加入表。:-/您能帮助我吗?像ALTER TABLE group ADD FOREIGN KEY(uid)REFERENCES user(uid)??您不需要添加外键约束,只需要添加索引。我必须重新启动数据库吗?因为它更快。。。想想慢一点为什么你还要检查电子邮件?为什么你还要检查电子邮件?