私はjob_title
とdomain
と呼ばれる列を持つ従業員のテーブル(約450万)を持っています。選択クエリを改善してより速くするにはどうすればよいですか?
動的なクエリを作成して実行して、役職に基づいて特定の従業員を選択し、提供されるドメインの配列内にあるドメインを希望することができます。
- 役職彼らが望む:、彼らは2つのものを入力してください - それはどのように動作する
は、フロントエンドのユーザーが(10,000どこでも200から)ドメインの大きさの配列で終わりです
:は、ジョブのタイトルは、彼らがだから私たちは、このように見える終わるクエリを作成
を除外したい
SELECT employee_id
FROM employee
WHERE (
domain LIKE '%shetlandfoods.co.uk'
OR domain LIKE '%example1.co.uk'
OR domain LIKE '%example2.co.uk'
-- About 50 additional domains in this list
OR domain LIKE '%example50.co.uk'
)
AND (job_title LIKE '%Manager%' OR job_title LIKE '%Director%')
AND (job_title NOT LIKE '%Assistant%')
(ドメインのリストが非常に長く、ドメイン(何千ものを含んでいてもよいこと注意!)は)
さて、このようなクエリは約230秒かかり、それは約180でのみですドメイン!何千ということを想像してみてください。それは永遠にかかります。
このクエリを最適化/変更してより高速に実行できる方法があるのだろうかと思っていましたか?あるいは、私がデータベースにできることは何ですか?
その後、 'そのほとんどがちょうどドメイン、これだけ最後までスキップされているこの
SELECT employee_id FROM employee WHERE INSTR(domain,'shetlandfoods.co.uk') > 0
を試すことができますが、別のを試すことができます一つの選択肢であります'これらの索引付けされていないLIKEフィルタはおそらく問題です。 –
'domain'データのソースは何ですか?また、いくつかのサンプルを表示できますか?私の考えは、多分このデータを何らかの形で前処理してクエリを簡単にすることができるということです。 –
Pro-tip:SQLに改行を含めることができます;-) –