首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化where子句中包含函数的sql查询

优化where子句中包含函数的sql查询
EN

Stack Overflow用户
提问于 2016-05-20 09:36:01
回答 1查看 27关注 0票数 0

我想检查一个IP是否存在于数据库中,因为它是generated.My代码,但是执行下面的50,000函数需要整整6秒。我使用PHP7 (MySQL 5.7.11),但我将在生产中使用mariadb

如何修改sql以使其执行得更快

代码语言:javascript
复制
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

代码语言:javascript
复制
    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)

代码语言:javascript
复制
$db->query("SELECT ipv6 FROM tbl_ipv6 WHERE ipv6 = inet6_aton(:ip)");
EN

回答 1

Stack Overflow用户

发布于 2016-05-20 09:45:38

在该列上创建一个索引:

代码语言:javascript
复制
ALTER TABLE tbl_ipv6
ADD KEY (ipv6);

现在再试一下:

如果ips是唯一的,您可以设置键唯一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37343151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档