はuserpwdプログラムのソースリストである。Perlで書かれたプログラムで,DBIインタフェース(注1)を使用してMySQL(注2)データベースへアクセスする。 5〜7行目では,コマンドライン引数からユーザ名,現在のパスワード,新しいパスワードをそれぞれ変数$user,$curpwd,$newpwdに受け取る。10行目はDBIインタフェースを使用してデータベースへ接続する(注3)。13〜14行目で受け...
「データへの最短ルート」とは、最も効率的なアクセスパス(実行計画)のこと。SQLチューニングはDBエンジニアの晴れ舞台といえる
インデックスとは データベースの世界で、インデックス(索引)とはテーブルに格納されているデータを 高速に取り出す為の仕組みを意味します。 インデックスを適切に使用することによってSQL文の応答時間が劇的に改善 される可能性があります。 インデックスにはB-Treeインデックスをはじめ、ビットマップインデックス、 関数インデックスなどの種類がありますが、ここでは...
Wikipediaめくりでは、MySQLに格納したWikipedia記事をランダムに表示している。速度を気にしないなら、 SELECT * FROM docs ORDER BY RAND() LIMIT 10; で良いのだけど、レコード数が多いと遅くて使いものにならない。そこで、記事IDを1から始まる連番になるようにDBに格納している。このようにすると、アプリケーション側でDBに格納されている文書IDが全て分かるので、ランダムに文書IDを10個選...
SELECT item, tag, log2(tf.times + 1) / log2(total) * (log2(n / df.times) + 1) AS tfidf FROM tf LEFT JOIN df USING(tag) LEFT JOIN (SELECT item, count(tag) total FROM tf GROUP BY item) AS a USING(item) CROSS JOIN (SELECT count(id) AS n FROM items) AS b WHERE item="j"; 実際はユーザ変数を使った方がSQLが短くなっていいと思う。 SELECT @total := count(tag) FROM tf WHERE item = "j"; SELECT @n := count(id) FROM items; SELECT item, tag, log2(tf.times + 1) / log2(@total) * (log2(@n / df.times)...
先日、MySQL Conferenceという催しに行ってきました。そこでMySQLの開発者のBrian Aker氏およびMichael Widenius氏と話をする機会があったのですが、やっぱしトップランナー達と議論するのは刺激になるなぁと思ったmikioです(その時の資料)。さて、一連の連載も今回が感動の最終回で、TCの性能上の蘊蓄をお届けいたします。 なぜdynamic hashingを使わないか Brianさん達とTCの実装についても...