2017-05-12 19 views
2

これは最初は愚かな質問のようですが、私の声を聞いてください。フィールドの検索と% ""%検索の違いはありません。

私は現在、恐ろしい検索機能を改善しています(1つの出力に複数のすべてが使用されています)。〜6000の名前のデータベースで個人名の一部を検索すると、fname LIKE%first_name%とlname LIKE%last_name%と列挙するLIKE%employee_number%。問題は、名前、姓、または従業員番号を指定しない場合、WHERE検索でこれらのフィールドを指定するのではなく、名前入力から取得した空の文字列を渡すだけです(例: LIKE FNAME%「」%LIKE%とLNAME「%LIKE」%と列挙型「」%。

私は、論理的なウェブDEVのよりSQ性能にスーパー新たなんだ、と私はどのくらいのちょうど興味がありましたちょうど検索で仕様としてそれらのフィールドを含めないこととは対照的に、彼らが空の場合、これはスピードと効率でなければなりません株。あなたの助けを

感謝:)

+0

質問を明確にすることはできますか?動的に列を選択する(または選択しない)方が良いかどうかを尋ねていますか?すべての列を選択し、where句で空の文字列を渡すか? –

+0

ええ私は、ユーザーが姓の姓と同じ検索を行うが、最初に検索を条件付けしない従業員番号について何も値を入力しないと、新しいクエリを書く価値があるかどうか、 lastとemp numを指定するか、空のままブランクを渡して、すでに存在するクエリに渡します。結果は、first_name =% ""とlast_name =% ""%and employee_number =% " "% –

+0

SQLは現在全く動作していますか? 'select where lname =" "'は、lastnameが空の文字列である行を返すだけで、そのチェックをスキップしません。 –

答えて

0

もちろん、それは時に検索に時間がかかります空でないフィールドを含むよりも、unlele SQLエンジンは本当にスマートで、 "%"はすべてのものにマッチして、それを無視してしまうと私は疑います。

あなたが求めている本当の質問はどれくらいですか - それはあなたのために答えることができません - あなただけがパフォーマンステストを通してそれを行うことができます。試してみて、試しに試してみて、その結果を比較してください。そうする必要はありません。

しかし、私はこれを一般的に言うでしょう。とにかくそれらのフィールドを検索することがあるので、索引付けされるべきでしょう。索引付けされると、6kレコードの検索は簡単です。空のフィールドがある場合とない場合のパフォーマンスの違いは、おそらくあなたの努力に値するものではなくなり、より重要なものに移動します。

+0

ええ、感謝する、ありがとう!申し訳ありませんが、私の質問は非常に説明的ではありませんでした。私はオーバーフローの質問形式も積み重ねるために新しく、多くの情報を残しています。別のテーブルから220万のドキュメントとファイルを取得していますが、他のテーブルを参照してそのリンクが人にリンクしているかどうかを確認しています。 。 @DavidBond; –

+0

; Npでは、実フィールドを使用してもパフォーマンスの問題に直面しています。私は空のフィールドとフィールドを使用すると、50sのクエリで、例えば、500msのクエリを許容することはできないと仮定します。フィールドが存在するときに検索を最適化するための作業を行います。一度それを十分に速くすれば、空欄に関する質問はほとんどなくなります。言い換えれば、あなたは間違った質問をしています。質問は、「これらのフィールドを検索するときに2百万レコードをパフォーマンスよくクエリする方法」でなければなりません。 – SteveJ

0

の代わりにキーワードを除外するとパフォーマンスが少し向上します。クエリselect null like "%"はnullを返すため、各行の値ごとにチェックする必要があります。

このクエリを高速化する場合は、関連する列にFull Text Searchインデックスを追加することをお勧めします。

0

〜6000行の場合、ハードウェアとリソースの可用性(Webホスティングアカウントと専用サーバー)に依存します。あなたは充足していない入力を除外する正しい道を踏み出しており、それを行う手続きを設計できるはずです。 https://dev.mysql.com/doc/refman/5.7/en/mysql-indexes.html

これらの参照は基本的に任意のバージョン5.xに適用されます。ここでは、インデックスのhttps://dev.mysql.com/doc/refman/5.7/en/if.html を情報:

あなたが5.7を使用している場合は、ここで手順のマニュアルを見つけることができます

+0

私は他のテーブル、私の悪いことに言及するのを忘れました。私は上に述べたように、私は物事を変えるだろうと確信していますが、あなたの返信とリソースのためにトンをありがとう! –

関連する問題