カテゴリー別アーカイブ: チューニング

GASでスプレッドシートのセルの書式を文字列に設定する

GAS 便利ですよね。
スクリプトでサクッとかける上にもともと拡張性の高いスプレッドシートなのでちょっとした実装でも良いものが作れます。
スプレッドシートなんかのインタフェースはエンジニア以外の人にも馴染み深いのでコストをかけて画面系を実装するよりも適している場合がよくあります。

なのですがGASを利用する際に正しくAPIやその動作を理解していないと、非常に重い動作になってしまうことがあります。
テストしてみたらループ処理なんかでずーっと時間がかかってとまらないスクリプトなんてこともあります。

今回GASでスプレッドシート上のセルの書式を文字列にできないかというところを試行錯誤にして改善してみたので、一つのパフォーマンス改善のアプローチとして参考にしてもらえればと思います。 続きを読む GASでスプレッドシートのセルの書式を文字列に設定する


str_replace, preg_replaceのパフォーマンス検証と呼び出しの最適化

概要

PHPでは文字列を置換するのにstr_replaceとpreg_replaceという関数を用いることができます、今回はそれぞれのパフォーマンスについて考察していきたいと思います。

予想としては当然preg_replaceのほうがコストが高く付くと思います、実際本当にそうなのか。またどの程度のパフォーマンスの開きが出るのかをいくつかのサンプルを用意して比較します。
簡単な表現から、多少複雑な表現まで検証してみます。
またそれぞれの関数の使用時の最適化についても調べたいと思います。 続きを読む str_replace, preg_replaceのパフォーマンス検証と呼び出しの最適化


count(*)からinnodbにおけるindex構成を確認する

* 概要

今回はinnodbにおけるcountの高速化について検証する。

きっかけは下記のブログですが。いつもお世話になっております。

http://nippondanji.blogspot.jp/2010/03/innodbcount.html

要約すると下記のようなスキーム雨がある時

CREATE TABLE t1 (  
  a bigint(20) unsigned NOT NULL AUTO_INCREMENT,  
  b int(11) DEFAULT NULL,  
  c tinyint(4) DEFAULT NULL,  
  d date DEFAULT NULL,  
  e varchar(200) DEFAULT NULL,  
  f varchar(200) DEFAULT NULL,  
  g varchar(200) DEFAULT NULL,  
  h varchar(200) DEFAULT NULL,  
  i varchar(200) DEFAULT NULL,  
  PRIMARY KEY (a)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

下記のようなsqlを想定する

SELECT count(*) FROM t1;

このとき例えばtinyintなどにindexを貼ることで、count(*)の高速化が見込める。

innodbのcount(*)において全レコードへのアクセスが必要になることは変わりないが
これは主キー(bigint)を全走査することよりも、小さいindexを全走査するほうが効率が良いということである。

まあ頭のなかでは理解できて、予想はできているんだけどちゃんと自分の手でピコピコやりたいなというところで下記を確認する。
1. 検索速度がa,b,cで変わることを確認(参照テーブルも)
2. e,f,g,h,iがあるときとないときで検索速度がそこまで変わらないことの確認(クラスタインデックスのノードが影響を与えないこと) 続きを読む count(*)からinnodbにおけるindex構成を確認する


単調配列array_diffの最適化について

簡単なarray_diffの検証用プログラム。

皆さんご存知の通りphpにはarray_diffという引数指定した配列の差分だけを抽出する関数が備え付けであります。
このarray_diffは配列が保持する値を比較します。

機能的にはこれで十分要件を満たしてくれている場合が多いと思います。

なんですが単調配列(連想配列ではない、オートインクリメントなインデックスによって保存される配列という意味で)においては
これをarray_diff_keyとarray_flipを用いた処理に置き換えることができ、その処理速度について検討します。 続きを読む 単調配列array_diffの最適化について