doudonn WEB制作やサーバーの話とかいろいろ

単純なSQLのみで処理して速くするコツの話

doudonn 更新日:
単純なSQLのみで処理して速くするコツの話

単純なSQLのみ

合体すればするほど遅くなるのがSQL。
上級者ほど合体テクニックに溺れがちだと思う。

一度是非、単純なSQL縛りでプレイしてみてほしい。

※PHP+DBの場合で話します

1、単純SQL設計の考え方

照合処理はPHPでやる。

「ID:5の名前は?」なんてのはDBでやる必要はない。
それを書いたテキストファイルを用意して、それを読み込めばいい。
「ようこそdoudonnさん」という文字列を表示するのにJOINとか無駄の極み。

単発で使うことが多いユーザーデータなどは
情報をまとめたテキストファイルを作ると便利です。
それを読み込んで変数として使えば速いし負荷も無い。

当然、そんなテキストファイルはDBを利用して作成します。
ユーザーデータとなるテーブルの作成は必須。
更新の度に自動でファイルを作成する仕組みにする。

ブログの記事データなんかも同じことです。
テキストファイル化してPHPで処理することでSQLは単純になる。

2、セレクト処理を分ける

JOINするテーブルを個別にセレクトして値を取得する。

テーブルAで「id:5」の名前を取得して、テーブルBで所属部署を取得する。
求めるデータ量が少ない場合、わざわざJOINしてから取得する必要は無い。
そして、確実にインデックスを効かせられるので、こちらの方が速い場合がある。

クエリキャッシュ的にも有利になることが多いと思います。
個人的にはテーブルの管理も楽になってプログラミングもしやすいです。
あと、使い回せることが多い。

何でも1回で済まそうとする悪い癖は一度見直そう。

3、ファイル名に情報を含める

URLという情報の宝庫を利用する。

例えば、画像ファイルと記事IDを同じにすれば、
DBで画像URLを取得する必要は無くなります。
サイズやaltなんかも書けば完璧です。

URL=ファイル名はいくらでも情報を詰め込められる。
これを意識して設計すれば、DBへのアクセスはかなり減ります。
カテゴリ判定なんかもURLにカテゴリ名を入れれば必要ない。

URL設計が杜撰だとDB設計も大変です。
これはSQL単純化の基本。

4、機能を減らす

処理が複雑になる機能は廃止にしよう。

本当にそれは必要なのか?無くてもいいんじゃないか?
例えば、検索機能を無くせばSQLはスッキリします。
あと、こんな集計データもう要らんやろ!と捨てるのも良い。

馬鹿な話に思えると思いますが、これが一番大事なことです。
上司の思いつきで追加した機能が負荷になっていないだろうか?
機能はどんどん捨てていかないと苦しむ一方です。

「あったらいいな」を実相すると大変。
某ソシャゲもどうでもいいデータばかり集計していてエンジニア泣かせだった。
こんなのは絶対、「こんなデータも取得しようよ!」という他部署の提案が原因です。
当然、全体的に遅いもっさりしたゲームだった。

単純SQL化は無理なものは無理です。
捨てることを考えたい。

まとめ

DBを使うのは最後の策と考えたい。

基本的にはテキストファイルを読み込んで処理した方が速い。
1記事を表示するのに3つのテーブルから検索するのは無駄です。
ワードプレスはそんな無駄な処理をしているから遅い。

そうしてテキストファイル化にするためにDBを作ることは大事。
単純SQL化はDBを減らすという意味ではないです。
集計的な処理はJOINしても全然問題無い。

DBは便利ですが、甘えてはいけない。
PHP側のプログラミングを頑張ってDBは最小限に使っていこう。

MariaDBの関連記事

記事一覧はこちら:MariaDB

管理人について
doudonn
名前:doudonn(どうどん)
ひたすらWEB制作な人。
一応社長です。音ゲー好き

プロフィール
お知らせ

2022年11月30日に全記事削除しました。
無駄にページ表示速度にこだわってます。

役立ちサイト
wiki

プライバシーポリシー・広告について


© 2022-2024 doudonn All Rights Reserved.