mysqlのsql文の最適化

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-23 14:23:22
オリジナル
995 人が閲覧しました

SELECT t_wenzhang.contents, t_wenzhang.createTime, t_wenzhang.title,t_wenzhang.pagePath FROM t_wenzhang LEFT JOIN t_keys ON t_keys.id = t_wenzhang.keyword where SUBSTRING(KeyP, 1, 1)='" + zimu + "' order by createTime desc






上記の t_wenzhang テーブルのデータは 4W、t_keys は 3W、なぜこの実行には 10 秒以上かかるのでしょうか。最適化すれば!


ディスカッションへの返信 (解決策)

まず、4 つのフィールド t_keys.id、t_wenzhang.keyword、KeyP、zimu にインデックスを付けます
次に、それでも遅い場合は、エンジンを変更してみてください
最後に、より適切なインデックス作成と、より最適化されたクエリの作成を選択するのに役立つように説明します。

まず、4 つのフィールド t_keys.id、t_wenzhang.keyword、KeyP、zimu にインデックスを作成します
次に、それでも遅い場合は、エンジンを変更してみてください
最後に、explan を使用して、より良いインデックスを選択できますさらに最適化されたクエリ ステートメントを作成してください。


4W データフェデレーション、なぜこんなに遅いのですか?

主な理由は、インデックス作成と最適化が適切に行われていないことです (特にインデックス)

良い設計は良い SQL よりも優れています。 SQL については、今後の使用のために学ぶことができます。現在、SQL はクエリに左結合を使用しません。これは記事のテキスト クエリのキーですか?

テーブルのインデックスを合理的に最適化し、キー接続テーブルの ID をインデックスに追加します。
where SUBSTRING(KeyP, 1, 1)='" + zimu + "' によりクエリが遅くなります。テーブル構造を投稿して確認してください。

SUBSTRING(KeyP, 1, 1)='" + zimu + "'
インデックスは使用しないので、次のように記述する必要があります
KeyP like '" + zimu + "%'

テーブルのインデックスを合理的に最適化します、キー接続テーブル ID とインデックス。
where SUBSTRING(KeyP, 1, 1)='" + zimu + "' によりクエリが遅くなります。テーブル構造を投稿して確認してください。

上は t_wenzhang 以下は t_keys です

SUBSTRING(KeyP, 1, 1)='" + zimu + "'
インデックスは使用されませんので、次のように記述します
KeyP like '" + zimu + "%' が必要です 最初の文字は等しいです。たとえば =a

それが機能しない場合は、最初に一時テーブルを作成し、クエリ後に削除する方が良いです。これははるかに高速です。

最初の文字が等しい場合は、次を使用します:
like 'a%'

この方法を試してください
SUBSTRING(KeyP, 1, 1)='" + zimu + "'
インデックスは使用しないので、このように書いてください
KeyP like '" + zimu + "%'
うまくいかない場合は、サーバー上でテストしているのか、ローカルでテストしているのかを作者に尋ねてください。サーバー上にある場合は、作成してみてください。 「ストアドプロシージャ」。
プロシージャを作成...

主な理由は、SUBSTRING 関数の使用により KeyP インデックスが無効であることです。これを "like '".zimu ."%'" に置き換えて KeyP インデックスを作成すると、速度が大幅に向上します。

インデックスがすべて構築されている場合、主な理由は関数が where 条件で使用されていることです。これにより、各クエリがキャッシュされなくなります。さらに、結合クエリでは大きな結果セットを駆動するために小さな結果セットが必要になります。

mysqlですか?

SUBSTRING(KeyP, 1, 1)='" + zimu + "' これは php の混合ですか?このように +$zimu+ にする必要がありますか?
'{$zimu}%' のような KeyP または '"+$zimu+"%' のような KeyP に変更します

t_keys.id にはすでにインデックス (主キー) があるはずです
t_wenzhang.keyword とインデックス
createTime とインデックス
KeyP もインデックスを追加します (長さ 1 のインデックスを追加できます)

そうすれば問題ありません

join を残す必要はなく、join するだけです

t_ とはどういう意味ですか

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート