SELECT resumeid, FirstName, LastName, Mobile, State, EmailId, Role,
Skill, Relocation, EmpType, ImmType, TotalExp, Buzzwords
from Resume r
where DetailsCaptured='Y'
and resumeid IN (
SELECT resumeid FROM Resume_Attachment ra
WHERE MATCH (ResumeTextContent)
AGAINST ('+"quality"' in boolean mode))
order by UpdatedDate desc
limit 100
答えて
IN
またはEXISTS
よりもJOIN
を使用することをお勧めします。とにかく、少なくとも古いバージョンでは、IN (SELECT ...)
は、ひどい性能を持っていました。
これが 'lazy eval'の試行である場合、追加テストがWHERE
にあるため動作しません。
それでは、ただクエリを簡素化してみましょう:
SELECT resumeid, FirstName, LastName, Mobile, State, EmailId,
Role, Skill, Relocation, EmpType, ImmType, TotalExp, Buzzwords
FROM Resume r
WHERE DetailsCaptured='Y'
AND MATCH (ResumeTextContent) AGAINST ('+"quality"' in boolean mode))
ORDER BY UpdatedDate desc
LIMIT 100
オプティマイザ
- は最初
FULLTEXT
のルックアップを行います。これは高速ですが、100より多くを返す可能性がありますresumeid
値; - ステップ1で見つかった行のリーチ(私はresumeidがPRIMARY KEYであると仮定し - 。常にCREATE TABLEのSHOWを提供すると便利です)
WHERE
の残りの部分と一致しないこといずれかを無視 - DetailsCaptured = 'Y';- ソート(
ORDER BY
) - 100行を剥がします。
「ほとんど」の行に「品質」が含まれていることを「知る」ことができない限り、それ以上に高速化することはありません。
コード内の 'JOIN'はどこですか? –
@SergioMontoro - 私の答えは2つの部分に分かれています:(1)なぜ「IN」が悪く、「JOIN」が良いのですか。 (2)速度の問い合わせを単純化し、 'IN/JOIN'を回避する方法。 –
@O。ジョーンズはコメントしましたが、確かに言うことはできません。 Indexing Detailsキャプチャされた方がパフォーマンスが向上する可能性がありますが、IN句とフルテキスト検索ではほとんどの時間がかかるでしょう。
次の代替手段を試してください。 無相関サブクエリの場合
SELECT resumeid, FirstName, LastName, Mobile, State, EmailId, Role, Skill, Relocation, EmpType, ImmType, TotalExp, Buzzwords
FROM Resume r
WHERE DetailsCaptured='Y'
AND EXISTS (SELECT resumeid FROM Resume_Attachment ra WHERE ra.resumeid=r.resumeid AND ResumeTextContent LIKE '%quality%' COLLATE utf8_general_ci)
ORDER BY UpdatedDate DESC LIMIT 100
オプティマイザがサブクエリを100回評価することを選択した場合、この式はひどく失われます。 'EXPLAIN SELECT'を見てみましょう。 –
- 1. MySQLクエリのパフォーマンス向上
- 2. MySQLは、クエリのパフォーマンスを向上させる
- 3. エンティティフレームワークのパフォーマンスを向上させるクエリ
- 4. SQLクエリのパフォーマンスを向上させる
- 5. MySQLクエリのパフォーマンスを向上させる方法
- 6. どのようにmysqlクエリのパフォーマンスを向上させるには?
- 7. クエリのパフォーマンスをさらに向上させることができます(MySQL)
- 8. UNION ALLでMYSQLのパフォーマンスを向上させるには?
- 9. mysql LOAD XML LOCAL INFILEテーブルインポートのパフォーマンスを向上させるには?
- 10. 頻繁な挿入率でMySQLクエリのパフォーマンスを向上させる方法は?
- 11. ネストされたクエリを使用してMySQLのSELECTパフォーマンスを向上させる
- 12. このクエリのパフォーマンスを向上させる方法は?
- 13. MySQLグループのレプリケーションのパフォーマンスを向上させる方法は?
- 14. ネットワーク上でMYSQLのパフォーマンスを向上させる方法
- 15. パフォーマンスを向上させる
- 16. パフォーマンスを向上させる
- 17. Postgresqlクエリのパフォーマンスを向上
- 18. ffmpeg - パフォーマンスを向上させるには?
- 19. 2つの「OR」条件の「mySQL」クエリのパフォーマンスを向上させます
- 20. クエリを変更せずにSQLクエリのパフォーマンスを向上させる方法
- 21. クエリでのパフォーマンスの向上
- 22. SQL Server 2005のクエリのパフォーマンスを向上させる方法
- 23. インデックス付きのクエリのパフォーマンスを向上させる
- 24. MyISAMのINSERT/UPDATEクエリのパフォーマンスを向上させる方法
- 25. MySQLでこのストアドプロシージャのパフォーマンスを向上させる
- 26. MySQLでパフォーマンスを向上させるSQLクエリを書き換える方法
- 27. pymongoクエリのパフォーマンスを向上させる方法
- 28. SQL Server:内部クエリのパフォーマンスを向上させる
- 29. 正確なオンラインでWareHouseクエリのパフォーマンスを向上させる
- 30. LINQクエリのパフォーマンスを向上させる方法
多くの詳細を提示しない限り、パフォーマンスに役立つことはできません。これを読んで質問を編集してください。特にクエリのパフォーマンスに関するセクションを読んでください。 https://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056#271056 –
また、INDEXでの読解をお勧めします。索引 - DetailsCapturedの場合は1、レジュメイドの場合は1 - が役立ちます。がんばろう。 – user3741598
@ user3741598 - MySQLは本質的に、単一の 'SELECT'(この場合は外側の' SELECT')で2つのインデックスを使用することはありません。それだけでは十分ではありません。 –