COSMO BALLOON

ふくらむステキデイズ
<< September 2017 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 >>

スポンサーサイト

一定期間更新がないため広告を表示しています

- | - | -

[PostgreSQL] インデックス

テーブルがあって、例えば、列(フィールド)がA,B,C,Dとあるとします。
インデックスが仮にB,C,A,Dの順で貼ってあった場合、SQL文を記述するとき
where句で使用する条件式は、B,C,A,Dの順に抜けなく指定してあるとインデックスが
有効になって高速に検索されるんですが、例えばA,B,C,Dの順だったり、
B,A,Dのような条件だった場合、インデックスが効かないため検索がかなり低速になります。
(B, C, D, Aだった場合は、B, Cまでが有効)

もう少し具体的な例を挙げると、
テーブルshain_tableで、列が社員コード(shain_cd 文字列4桁)、性別(sex 整数)、
生年月日(birth 文字列8桁)、名前(name 文字列 20桁)だとして、
この順番でインデックスが貼ってあるなら、
select * from shain_table where shain_cd='1234' and sex=1 and birth ='19800617';
のようなSQL文なら高速に検索されますが、
select * from shain_table where sex=1 and birth ='19800617' and shain_cd='1234';
では低速になります。

また、Like演算子、Not、Exist、<>、in、orなどが使われている場合もインデックスがその手前までの分しか効きません。
DBをいろいろ経験している人にとっては、半ば常識なのかもしれませんが、PostgresSQL 7.xで一千万件くらいの状態で実際に体感しましたが、とんでもない実行時間の差でした。

[FLASH] Flash5とMX2004proでのオーサリング時の注意

はまった。

goFrameNum = 33.3333333;
this.gotoAndPlay(goFrameNum);

というようなものを、Flash5でパブリッシュすると、goFrameNumの値は適当にラウンドされて(ceilなのか、floorなのか、roundなのかわからないが)、まともに動くが、MX2004proでやってみたら動かない。
こいつで約1時間半はまった。クソゥ。
2年前のスクリプトの係数変更するだけかと思ってたので、瞬殺ダゼ!なんて、うそつき千万。

教訓:ごまかしの多いスクリプトはやめましょう。

[PHP] 型キャスト 型を明示して変換する

忘れそうなので。

HP の型キャストは、C 言語と同様に動作します。つまり、 変換しようとする型の?前をキャストする変数の前に括弧に入れて 置きます。

$foo = 10; // $foo は整数です
$bar = (double) $foo; // $bar は倍精度実数です
使用可能なキャストを以下に示します。

(int), (integer) - 整数へのキャスト

(float), (double), (real) - floatへのキャスト

(string) - 文字列へのキャスト

(array) - 配列へのキャスト

(object) - オブジェクトへのキャスト

ティップ 文字列に変数をキャストする代わりに、2重引用符で変数を括ることも 可能です。

括弧の中でタブとスペースを使用することができることに注意してくだ さい。従って、次の文は、機能的に等価です。

$foo = (int) $bar;
$foo = ( int ) $bar;

[PHP] magic_quote_gpc

PHP_INI_PERDIRやPHP_INI_SYSTEM になっているPHPオプション

ini_set("magic_quotes_gpc",1);
等としても、反映されない。

----------------------------------------------
ini_set("magic_quotes_gpc",1);
print get_magic_quotes_gpc();
----------------------------------------------
とすると、「1」が返されるンだけど、試しに「ソフト」という文字列をPOSTしてみたところ、クオートされないので、注意!
※環境によっては違うかもわからんけど、Linuxではそうなるくさい。

ということは、スクリプト中の後々のフラグメントに全く使えなくなってしまうので、
----------------------------------------------
ini_set("magic_quotes_gpc",1);
----------------------------------------------
などなど、PHP_INI_ALLとなっていない項目について、ini_setでいじっちゃだめ。

magic_quote_gpc

いろんなところで、offにして、必要なときにaddslashes($arg)したほうがよいとの話でずーっと気になりながらも、あやふやなままになっていたので、ちょっと検証(↑)。
やっぱり offをデフォルトと考えて、DBへ接続する場合のみに addslashes()したほうが、もし、magic_quote_gpcがonのサーバなんかにあたったときも、プログラムの変更する場所が少なくなってよさそうだ。

サーバの設定がいじれる場合は、全然問題ないけど、いじれない場合の処置

共有サーバ用のプログラム等で、magic_quote_gpc が onの場合
---------------------------------------------------------------------------------
/* magic_quotes_gpcがonの場合の処理
* $_POST,$_GET、$_COOKIE情報からバックスラッシュを削除する
*/
if(get_magic_quotes_gpc()){
$_GET = array_map("strip_text_slashes",$_GET);
$_POST = array_map("strip_text_slashes",$_POST);
$_COOKIE = array_map("strip_text_slashes",$_COOKIE);
}
function strip_text_slashes($arg){
if(!is_array($arg)){
$arg = stripslashes($arg);
}elseif(is_array($arg)){
$arg = array_map("strip_text_slashes",$arg);
}
return $arg;
}
------------------------------------------------------------------------------
コンフィグ系の全部でインクルードするファイルに上記を追記することを試してみる。なんだかうまくいきそう。※処理おそくなるけど(W

DBへポストするときは、
------------------------------------------------------------------------------
function add_text_slashes($arg){
if(!is_array($arg)){
$arg = addslashes($arg);
}elseif(is_array($arg)){
$arg = array_map("add_text_slashes",$arg);
}
return $arg;
}
-----------------------------------------------------------------------------
をDBヘポストする前の配列に
$data = array_map("add_text_slashes",$data);
かましてあげればよいと思われる。

ハッ!!! どっちも再帰してるから・・・呼び出すときにわざわざarray_map しなくてもよいかも・・・・
$_POST = strip_text_slashes($_POST);
でもいけそうな予感・・・。

というよりも、POST、GET、COOKIEを処理するwrapperを作ったほうが今後のためによさそうでもある。ActionScriptみたくファンクション上書き出来ちゃえば楽なのにな。

JSP 覚えておくエラー

javax.servlet.ServletException: String index out of range: 3
substringやらcharatメソッドで、3番目の文字を取得しようとしたら3番目の文字がなかったよ的エラー。
直訳:3番目は文字列の存在範囲を超えています

もうちょっとJSPのエラーの意味くらい理解できるようになろう。

【Flash】多次元配列

Flashで多次元配列を使用する方法
※ハッシュの初期化ができればよい。

array['hoge'] = ["",""]

あああ。すばらしい。こねまわさなくてよくなったよ。
ありがとうNAKさん。
たぶんこの方法は、おしえてもらわなかったら、見つからなかった。

しかし・・・これを考えるに・・・・flash内のハッシュの実装は
かなーりしょぼいのね。。。

Copyright (C) 2004 paperboy&co. All Rights Reserved.

Powered by "JUGEM"

 
RECENT COMMENT
RECENT TRACKBACK
PROFILE