我正在使用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
_________________________________________________________________________________
答案 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函数。
希望有所帮助。