※ パクレゼルヴではWeb開発エンジニアを大募集中!詳細はこちら

Archive

Author Archive

SQLチューニング基礎3  

2008/11/17 月曜日 15:41:43

こんにちわ!かーつんです!!
不定期更新SQLチューニング基礎3発目です。

ん~と、今回は「union (時と場合でminus)」です。

2つのテーブルの集計結果など、同時に取ってきたいとき。
まぁ、方法としては3種類。

1.2回クエリを投げて、PGで加工する。
2.副問い合わせでSQL内で加工する。
3.クエリ的には1回でunionで結果のみがっちゃんこ。

コスト的には、1<3<2の順で高くなるって感じでしょうか。
副問い合わせは使い方にも依りますが、mysqlで使うには少々気が咎める時がありますよね。
でも、どうしても2回クエリを投げれない(投げたくない)。ときってあると思うんです。

そんなとき、同じSQLを2回書いて、unionでくっつけて、結果にしてしまう。
こんな事をたまに思いつきます。
ただ、本来のunionの使い方は、結果の合成なので、
同じフィールド名を持つ違うテーブルの値を合算させてしまうのが定石なのですが、
あ え て、同じフィールド名をもつ違うテーブルの値に別名つけて別レコードとして、
同時に取得する。

まぁ、どういうことかというと、

SELECT COUNT(hoge) FROM exampleA;
SELECT COUNT(hoge) FROM exampleB;

というのを、

SELECT COUNT(hoge) AS hogeA FROM exampleA;
UNION
SELECT COUNT(hoge) AS hogeB FROM exampleB;

てな具合にかいて、

結果を

hogeA hogeB
100 200

という具合に取得するわけです。
PG内での加工は通常の結果より面倒ですが、
1度に取らなきゃいけないときに、1度で取れるのがメリットです。

なんかまぁ、基礎というより裏技っぽくなっちゃいましたが、
こんな事も出来ますよ。ってくらいで、知ってて損はないはずです。

あと、MySQLでは使えないのですが、
「MINUS」についても同じような使い方をすることが出来るときがあるので、
いろいろ工夫してみてください。

いじょ。かーつんがお送りしました。

かーつん MySQL, データベース

ExcelVBAちょこっとメモ  

2008/10/29 水曜日 20:17:49

こんばんわ。かーつんです。

今回はちょっとしたツール作った時のメモをば。

Excelファイル選択ダイアログを出して、選択されたファイル名(パス付)をセルに格納する場合
こんな感じに、GetOpenFilename()を使う。

Private Sub selectFile()
	Dim FileName As String
	'-- ファイル名取得 --
	FileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
	If FileName = "False" Then
		Exit Sub
	End If
	ActiveWorkbook.Sheets(1).Cells(1,1).Value = FileName
End Sub

「キャンセル」されたときは【False】が返ってくるからSubを抜けるようにしてエラー回避する。
ファイル名のみ欲しいときはFileNameを分割すればOK

フォルダを選択させて、フォルダ名(パス付)をセルに格納する場合
こんな感じに、FileDialog()を使う

Private Sub selectFolder()
	Dim Folder As String
	'-- フォルダ名取得 --
	With Application.FileDialog(msoFileDialogFolderPicker)
		If .Show = True Then
			Folder = .SelectedItems(1)
		Else
			Exit Sub
		End If
	End With

	ActiveWorkbook.Sheets(1).Cells(1,1).Value = Folder
End Sub

キャンセルされてもこいつは【Falseを返さない】。
調べるの面倒なので、選択されたときには結果を取得して、
それ以外はエラーでSubを終わらせてみた。

もっとスマートな書き方とかありそうだけど、
今回はツールなので、時間勝負ということで。。。

以上、ちょこっとメモでした。

かーつん その他

SQLチューニング基礎2  

2008/9/30 火曜日 21:11:41

こんばんわ。かーつんです。

SQL負荷って、考えたことありますか?

条件などにもよりますが、
SELECT、INSERT、DELETE、UPDATE順に徐々に重くなります。
理由は簡単。

SELECT=検索
INSERT=挿入+インデックスレコード追加
DELETE=検索+削除+インデックスレコード更新
UPDATE=検索+更新+インデックスレコード更新

と、処理が増えるからです。
例えば、UPDATEを100回投げるなら、
TRUNCATE+INSERTの方が早い事もあります。
要するに更新が一番重く、検索が一番早いわけですね。

で、よくあると思いますが、
あればUPDATEかけて、なければINSERTというのを
SELECT+UPDATE+INSERTの組み合わせでやってる方が多いと思います。
そんなときは、迷わずREPLACEを使いましょう。
REPLACEは検索+[更新|挿入]+インデックス[更新|挿入]です。

上の例だと、
SELECT+(UPDATE or INSERT)=検索+[(検索+更新)|挿入]
REPLACE=検索+[更新|挿入]

どちらが早いか一目瞭然ですよね。
検索一回分REPLACEの方が早いです。
もちろん条件的に無理。ということもありますが、
使えるときは使っちゃった方が、処理が早いです。

プログラムで、
ファイルレコード1件ごとにSELECT投げて、
UPDATEかINSERTか判断して実行して、
これを1000回繰り返す。コレは悪です。やってたら犯罪です。

一括でファイル読み込んで、
一括でSELECT投げて、
REPLACEで一気に1000回更新

置き換えれる時は迷わず変えてしまいましょうネ

以上。か^-^つんがお送りしました。

かーつん MySQL, データベース

携帯CSSちょっとメモ  

2008/9/19 金曜日 23:37:57

こんばんわ。かーつんです。

さっき調べてて分かったことを、
ちょこっと残しときます。

携帯でCSSを使うとき、
例えば以下のように書くと

style="font-size:xx-small"

携帯の機種によっては思わぬ表示が起こります。
今回遭遇したのは、xx-largeを指定していた文字同士が、

行間が狂って重なり合って表示される。

コレを解消するには。

style="font-size:xx-small;"

と、キチンと「;」を付け忘れることなく、
正しい書き方で書く。

そう。これだけ。。。

意外と忘れてしまいがちな「;」ですが、
PCでは何ともない事が携帯では大惨事に繋がるようです。

かーつん HTMLとか, 携帯電話

winmail.datに苦悩する  

2008/9/5 金曜日 15:52:23

こにゃにゃちわ。
かーつんです。

『winmail.dat』ってご存じですか?

outlookからThunderbirdやBeckyに添付有メールを送ると、
良く出現するんですよね。

で、コイツいったい何者よ。と、調べたんですが、

MS曰く「RTF(リッチテキストファイル)の情報が格納されています。」

だそうです。
んじゃ、設定を「テキスト」にしてメールを作成してやると解消する。
って、思って設定変えて(MSのサポートページにも書いてある)、

再送信。

変わりません。。。。
どうやら、outlookにファイルを付けると(付けなくても稀に)、
勝手にRTFの情報を抱え込むようです。

まぁ、今時outlookなんかを使っていた私が悪いんですが、
取引先とメールやりとりするのに不具合出まくりというのも、
取引先に失礼極まりない事だと言うことで、メーラ変えました。

winmail.datにRTF情報を抱え込まれると、
添付ファイルもまとめて抱え込まれて、
知らない人は、添付ファイルが開けない。再送してもらおう。
となります。

とまぁ、こんな失敗談が役に立つかどうかは分かりませんが、
もし今outlookを使われている方がいらっしゃったら、
すぐにメーラを変えてしまいましょう。
アドレス帳や、今までのメールなどは、基本的に移し替えることも可能です。
仕分けルールなど、細かい設定が移せないのが難点ではありますが、
「ファイルが開けないよ。」「再送します。」「また開けないよ。」「再送します。」・・・
なんて事が起こる前にサクッと変えて、
使い方になれてしまった方が得策だと思います。

ちなみに、わたしはMS信者というわけではなく、
使えてたから使っていた。というレベルでした。

個人的には、移行させるならBeckyが一番かなと。
使い方似てますし、それほど苦労なく移行できると思います。
難点はシェアソフトなんで、お金が掛かるくらい。
お金かけたくない!というかたはThunderbird辺りが無難かと思います。
その他メーラも多々点在していますので、
自分に合ったメーラを見つけて移行してしまいましょう。

以上、か^д^んがお送りしました。

かーつん その他