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

时间:2017-07-21 22:01:17

标签: python mysql query-optimization

我正在使用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
_________________________________________________________________________________

3 个答案:

答案 0 :(得分:0)

您应该专注于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搜索索引功能

答案 1 :(得分:0)

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

CREATE INDEX acct_ix ON accounts (email);

答案 2 :(得分:0)

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

我也同意上一篇文章,你应该在电子邮件领域创建索引。

最后,LIKE函数的性能优于REGEX函数。

希望有所帮助。