2016-06-20 4 views
0

私は100万行以上の公開レコードのデータベースを持っています。私は、ユーザーfullnameと生年月日を使用してデータベースを照会する必要があります。クエリは次のようになります。最初に一致する行を返すクエリのパフォーマンスを向上させる

SELECT * 
FROM TexasBexarCountyMisdemeanorPublicRecords 
WHERE ([FULL-NAME] = 'EXAMPLELASTNAME, EXAMPLEFIRSTNAME') 
    AND (BIRTHDATE = '1989-10-18 00:00:00') 

現在、このクエリは正常に完了するのに2分45秒かかります。残念なことに、データ構造とユーザーが提供する情報のために、データベースを照会する他の方法は考えられません。

このクエリの目的は、単一のユーザーに関するレコードのリストを提供することです。これらのレコードは、ユーザーのフルネームと生年月日を持つことによって所有権を定義します。すべての列には文字列値があります。ユーザーが複数のレコードを持つ可能性もあります。

  1. このクエリは非常に非効率的です。 FULLNAMEとBIRDAYAYのマッチを探すレコードを検索するには、より良い方法がありますか?

  2. 最初の試合後に検索を停止することを考えていましたが、これは複数のレコードを持つユーザーにとっては役に立ちません。

  3. 私は既にプライマリキー列を持っており、そのIDを使ってレコードをすばやく見つけることができます。しかし、ユーザーが初めてログインしたときにそのIDを知る方法はありません。したがって、最初の姓と生年月日を使用してレコードを検索し、その後の参照のためにそのIDを保存する必要があります。

  4. 検索条件を追加するとより効率的になりますか? SEX、RACE、ETCの値を渡すと。

ありがとうございました。

+0

MySqlまたはSQL Serverですか? – vercelli

+1

クエリを最適化するインデックスを追加することを検討しましたか?列FULL-NAMEとBIRTHDATEのインデックス? –

+0

私は一意の識別子を持っていますが、他の列にインデックスを追加することは考えていませんでした。それを見て、ありがとう@ThomasPhilipp – Lostaunaum

答えて

2

インデックスが付けられているため、IDで高速に戻ります。検索しているフィールドのインデックスを作成し、必要に応じてインデックスをカバーすることも検討してください。

+0

ダン!あなたは5秒ほど私にそれを打つ! –

+0

ありがとう@Joe C病気インデックスを追加するには – Lostaunaum

+1

私はちょうどあなたがStackOverflowから学ぶことができるかに驚いています。ありがとう@ジョーC今すぐクエリが瞬間です。 – Lostaunaum

関連する問題