我想检查数据库生成后是否存在IP。我的代码可以工作,但执行以下函数50,000
次需要6秒钟。我在PHP 7(MySQL 5.7.11)上,但我将在生产中使用mariadb
。
如何修改sql以使其执行得更快
function ip_exist ($db,$ipv6_address) {
$db->query("SELECT ipv6 FROM tbl_ipv6 WHERE ipv6 = inet6_aton(:ip) LIMIT 1");
$db->bind(':ip', $ipv6_address);
$db->single();
if ($db->rowCount() > 0) {
return true;
}
return false;
}
SQL
CREATE TABLE `tbl_ipv6` (
`ipv6` varbinary(16) NOT NULL,
`email_id` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `tbl_ipv6`
ADD PRIMARY KEY (`ipv6`);
表中没有行:4
更新2 查询变为以下(感谢Bernd Buffen)
$db->query("SELECT ipv6 FROM tbl_ipv6 WHERE ipv6 = inet6_aton(:ip)");
答案 0 :(得分:1)
在此列上创建一个INDEX:
ALTER TABLE tbl_ipv6
ADD KEY (ipv6);
现在再试一次:
如果ips是唯一的,您可以将密钥设置为唯一。