MySQLのViewを使った感想

100万件以上のデータを持つDBで、Viewテーブルを使える機会があったので使ってみました。結果としては残念なことに。Viewテーブルを利用するだけでは性能改善につながりません。

Viewテーブルについて調べているときに、「MySQLのViewテーブルは裏側でcreateしたときのSQL発行するだけだから、単独では性能改善につながらない」という内容の記事を見たんですが、まさにその通りの結果になりました。ViewテーブルをcreateしたときのSQLでの検索性能と、Viewテーブルを使って同様のデータを取得しようとしたときの性能はほぼ一緒。改善された様子はありませんでした。

DBにOracleを使っていたときは、性能改善の手段として、まず変数のbind化やストアドプロシージャと供にViewテーブルを使って性能改善をしていた記憶があるので、Viewテーブルに対して検索をかけたときは単一テーブルに対して検索かけた程度の性能が期待できるのかと勘違いしていました。OracleではSQL発行の窓口としてのViewテーブルではなく、実際にデータを持っていたんでしょうか。(もう5年近く前の経験なので、今は全く変わっているかもしれません。Oracle)

Plugin内のExceptionで、処理はとまらない

ActionHelperやPluginを有効利用しようと模索していますが、
今回Pluginでチェック処理を行った際に、気づいたことがあります。

Plugin内でExceptionを発生させても、処理は止まらないということ。
Zend_Controller_Action内の処理で発生した場合は止まるのに。(※1)

※1
Zend_Controller_Action内とは、ActionHelper、Controller内で
利用しているmodelの処理を指しています。

調べてみると、PluginでのExceptionはPluginBroker
(Pluginの処理を統合してるとこ)の中で全てcatchされているために、
PluginBrokerを呼び出しているFrontControllerでは認識できません。
そのために、FrontControllerはPlugin内でExceptionが発生しても、
その後の処理をどんどん実行していくというわけです。

チェック次第で処理を中断するという内容の処理を記述するなら、
Zend_Controller_Action内(※1)でってことですね。

HelperとPluginのこういう違いがわかっていくと、使い分けの
目安がなんとなくできるようになっていきますね。