SELECT 语句执行时间超过 1 分钟

Posted

技术标签:

【中文标题】SELECT 语句执行时间超过 1 分钟【英文标题】:SELECT statement taking more than 1 minute to execute 【发布时间】:2017-07-21 22:01:16 【问题描述】:

我正在用 python 编写一个程序来解析我的数据库。它目前在表中有近 600 万条记录。

因此,当我执行查询时,执行需要花费太多时间。

这里有两个例子:

Attempting to execute: SELECT * FROM `accounts` WHERE email = 'xxx@xx.com'
'password': u'****', 'ip_address': u'***.***.***.***', 'email': u'xxx@xx.com'
Time taken: 63.6909999847 seconds
_________________________________________________________________________________

Attempting to execute: SELECT * FROM `accounts` WHERE email REGEXP '/rosic/g' LIMIT 200
Time taken: 212.973999977 seconds
_________________________________________________________________________________

【问题讨论】:

你应该在数据库中构造一个索引 你能解释一下我会怎么做吗? 雷克斯不能自动化,afaik。 1.将适当的索引添加到您的架构中。 2. 尝试使用 LIKE 代替 REGEXP 【参考方案1】:

您应该专注于WHERE 部分,特别是您应该在email 列上创建一个索引,因为您有一个过滤条件WHERE email = 'xxx@xx.com'

CREATE INDEX idx_email ON accounts (email(30));

您可以使用ALTER 语句来执行此操作

ALTER TABLE accounts ADD INDEX idx_email (email(30));

根据您的评论,因为它是 TEXT 类型的列,您需要指定索引长度。请参阅 mysql 文档http://dev.mysql.com/doc/refman/5.0/en/create-index.html。另外,您可以考虑查看FULLTEXT 搜索索引功能

【讨论】:

我该怎么做? 我在中途收到来自 MySQL 的错误:Error in query (1170): BLOB/TEXT column 'email' used in key specification without a key length @J.Doe,再次检查编辑并提前发布所有这些信息 常规索引不会用于相关查询。用EXPLAIN SELECT ... 来证明。 FULLTEXT 可能有用。【参考方案2】:

您还应该只返回您需要的列。选择 * 不是一个好习惯。

我也同意之前的帖子,你应该在email字段上创建索引。

最后,LIKE 函数比 REGEX 函数有更好的性能。

希望对您有所帮助。

【讨论】:

是的,LIKE 会更快,但可能不会快两倍。【参考方案3】:

我不是 MySQL 开发人员,但试试这个:-

CREATE INDEX acct_ix ON accounts (email);

【讨论】:

以上是关于SELECT 语句执行时间超过 1 分钟的主要内容,如果未能解决你的问题,请参考以下文章

查看聚集索引查找超过 50 万行需要 7 分钟

执行次数最多的sql语句

跟踪数据库中执行时间超过1.5秒的语句及SP,导入数据库

performSegueWithIdentifier 需要超过一分钟才能执行或崩溃

当应用程序在后台打开超过 30 分钟时,Cordova 会执行某些操作

在db2数据库9.7中,有时候执行一条update或select语句,要耗时很久,几个小