私は100万行以上の公開レコードのデータベースを持っています。私は、ユーザーfullnameと生年月日を使用してデータベースを照会する必要があります。クエリは次のようになります。最初に一致する行を返すクエリのパフォーマンスを向上させる
SELECT *
FROM TexasBexarCountyMisdemeanorPublicRecords
WHERE ([FULL-NAME] = 'EXAMPLELASTNAME, EXAMPLEFIRSTNAME')
AND (BIRTHDATE = '1989-10-18 00:00:00')
現在、このクエリは正常に完了するのに2分45秒かかります。残念なことに、データ構造とユーザーが提供する情報のために、データベースを照会する他の方法は考えられません。
このクエリの目的は、単一のユーザーに関するレコードのリストを提供することです。これらのレコードは、ユーザーのフルネームと生年月日を持つことによって所有権を定義します。すべての列には文字列値があります。ユーザーが複数のレコードを持つ可能性もあります。
このクエリは非常に非効率的です。 FULLNAMEとBIRDAYAYのマッチを探すレコードを検索するには、より良い方法がありますか?
最初の試合後に検索を停止することを考えていましたが、これは複数のレコードを持つユーザーにとっては役に立ちません。
私は既にプライマリキー列を持っており、そのIDを使ってレコードをすばやく見つけることができます。しかし、ユーザーが初めてログインしたときにそのIDを知る方法はありません。したがって、最初の姓と生年月日を使用してレコードを検索し、その後の参照のためにそのIDを保存する必要があります。
検索条件を追加するとより効率的になりますか? SEX、RACE、ETCの値を渡すと。
ありがとうございました。
MySqlまたはSQL Serverですか? – vercelli
クエリを最適化するインデックスを追加することを検討しましたか?列FULL-NAMEとBIRTHDATEのインデックス? –
私は一意の識別子を持っていますが、他の列にインデックスを追加することは考えていませんでした。それを見て、ありがとう@ThomasPhilipp – Lostaunaum