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 分钟的主要内容,如果未能解决你的问题,请参考以下文章
performSegueWithIdentifier 需要超过一分钟才能执行或崩溃