先日、とあるレンタルサーバーで特定の処理が動かないというトラブルが発生しました。
以前から、トラブルが続いていたレンタルサーバーだったのですが、今回は以前とは違う種類のトラブルでした。
前回は、MySQLサーバーへの接続に失敗するというトラブルだったのですが、今回は特定のSQL文を実行するとエラーとなってしまうトラブルでした。
そのSQL文とは、「join」を含むSQL文です。
さて、原因は分かったけど解決方法は?
全部の「join」を書き直すとなると、相当な労力だ。
どうにかならないものか。
とりあえず、データベースの設計を見直すことに。
なぜか、このシステムのデータベースにはインデックスの設定がされていない。
PRIMERY KEYは設定してあるんですが。
とりあえず、気休めでもいいからインデックスを設定しておこう。
このインデックスの設定が正解かどうかは分からないが、「join」を含むSQL文でも正常に処理が行われるようになった。
んー、インデックスを設定することで参照レコードが少なくなった??
何はともあれ、システム無事復旧。
私は、あんまり「join」を使わないのですが今回のことで「join」を使いこなせると便利だが、諸刃の剣では?と思うようになった。
それから、インデックスは必ずDB設計する時には設定をする。
普段から、1、000万単位のDBを扱っているのでインデックスにはシビアに考えているので私自身は問題ないんですけどね。
ちなみに、レンタルサーバー会社にこのことを問い合わせてみると
共用サーバーなので、他の誰かが無茶なSQLを流しているみたいで制限をかけた。
とのこと。
そういう大事なことは、事前に伝えないといけないと思うんですが。