2017-07-21 7 views
-1

私はpythonでデータベースを解析するプログラムを作成しています。現在、このテーブルには約600万レコードがあります。SELECT文の実行に1分以上かかる

私がクエリを実行すると、実行に時間がかかりすぎます。ここで

は、2つの例です:

Attempting to execute: SELECT * FROM `accounts` WHERE email = '[email protected]' 
{'password': u'****', 'ip_address': u'***.***.***.***', 'email': u'[email protected]'} 
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

どうすればいいのか説明できますか? –

+0

しかし、レックスは自動化できません、afaik。 –

答えて

0

あなたはWHERE一部に集中する必要があり、具体的にあなたがそれWHERE email = '[email protected]'

CREATE INDEX idx_email ON accounts (email(30)); 
にフィルタ条件を持っているので、インデックスが email列に作成していなければなりません

ALTERステートメントを使用してこれを行うことができます

TEXTタイプの列であるため、コメントごとにインデックスの長さを指定する必要があります。 MySQLのマニュアルhttp://dev.mysql.com/doc/refman/5.0/en/create-index.htmlを参照してください。また、私はMySQLの開発者ではないよFULLTEXT検索インデックス機能

+0

どうすればいいですか? –

+0

@ J.Doe、回答があれば編集してください – Rahul

+0

クエリのエラー(1170):BLOB/TEXT列 'キー長なしのキー仕様で電子メール'を使用しました。 –

0

に探して検討するが、これを試してください: -

CREATE INDEX acct_ix ON accounts (email);

0

はまた、あなたが必要なだけの列を返す必要があります。選択*は良い方法ではありません。

私も前の投稿に同意して、電子メールフィールドにインデックスを作成する必要があります。

最後に、LIKE関数の方がREGEX関数よりも優れたパフォーマンスを示します。

希望に役立ちます。

+0

はい、「LIKE」は速くなりますが、おそらく2倍はなりません。 –

関連する問題