MySQLタグのついている投稿
MySQLの日付比較
2010年7月27日
MySQLの日付周りを甘く見てたら、ハマった。
column BETWEEN A AND B
イコール
A <=column and column <=B
なので、以下のSQLの結果は同一かと思ったが、違った。。。
mysql> select '2010-07-26 00:00:00' BETWEEN '2010-07-25' AND '2010-07-26'; +-------------------------------------------------------------+ | '2010-07-26 00:00:00' BETWEEN '2010-07-25' AND '2010-07-26' | +-------------------------------------------------------------+ | 0 | +-------------------------------------------------------------+ 1 row in set (0.00 sec) mysql> select '2010-07-26' BETWEEN '2010-07-25' AND '2010-07-26'; +----------------------------------------------------+ | '2010-07-26' BETWEEN '2010-07-25' AND '2010-07-26' | +----------------------------------------------------+ | 1 | +----------------------------------------------------+ 1 row in set (0.01 sec)
MySQLクイックチューニング
2010年1月19日
mysqltuner実行画面
mysqlのパラメータチューニングをある程度おおざっぱに行うスクリプトを発見。
一言で言えば、10分である程度チューニングできる!
http://blog.mysqltuner.com/
使い方は至って簡単、ダウンロードして実行するだけ。
実行すると、MySQLへのログインIDとパスワードが聞かれる。入力すると、MySQLのステータスや変数、物理メモリ容量をチェックされ、その環境に合ったパラメータを提案してくれる。
% wget http://mysqltuner.com/mysqltuner.pl % perl mysqltuner.pl
適当に運用している環境ではすごい楽。デフォルトのmy.cnfでは物足りないけど、パラメータチューニングをExcelを使って統計情報を元にチューニングするのは面倒という人向け。
24時間以上運用していないと統計値が収束しないので、ある程度運用してから実行した方がいいです。
innodb_log_file_sizeを変更する方法
2009年12月1日
innodb_log_file_sizeの変更手順。
mysql> SET GLOBAL innodb_fast_shutdown=0; # /etc/init.d/mysql.server stop # mv ib_logfile* /tmp/ # /etc/init.d/mysql.server start
MySQL InnoDB, Linux and SSD tuning
2009年11月20日
松信 嘉範さんによるhbstudy#5発表資料「Linux/MySQLサーバーのパフォーマンスチューニング」
これを読んで、追加で行ったチューニングや新しいことメモ。さすが中の人だけあって詳しい。
1:1
InnoDBで。
TEXTなどのデータを別テーブルへ。
よく検索される列ごとにテーブルをまとめるとbuffer poolを効率よく使える。
物理メモリが足りなくなったときの挙動
ファイルシステムキャッシュを減らす。(100の場合、プロセスをスワップアウト)
# echo 0 > /proc/sys/vm/swappiness
永続化
# echo ‘vm.swappiness=0′ >> /etc/sysctl.conf
mtstat
vmstatの高機能版かな。数値がhuman friendlyで、カラーリングされている。
(トップ画)
SQLで先月という表現
2009年11月16日
SQLで先月という制約を書く方法。
col BETWEEEN date_format(adddate(now(), interval -1 month),'%y-%m-01') AND last_day(adddate(now(), interval -1 month));
以下、MySQLでの実験。現在は2009年11月16日。
mysql> select '2009-10-16' between DATE_FORMAT(adddate(now(), interval -1 month),'%Y-%m-01') and last_day(adddate(now(), interval -1 month)) as result; +--------+ | result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec) mysql> select '2009-10-31' between DATE_FORMAT(adddate(now(), interval -1 month),'%Y-%m-01') and last_day(adddate(now(), interval -1 month)) as result; +--------+ | result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec) mysql> select '2009-10-01' between DATE_FORMAT(adddate(now(), interval -1 month),'%Y-%m-01') and last_day(adddate(now(), interval -1 month)) as result; +--------+ | result | +--------+ | 1 | +--------+ 1 row in set (0.00 sec) mysql> select '2009-11-01' between DATE_FORMAT(adddate(now(), interval -1 month),'%Y-%m-01') and last_day(adddate(now(), interval -1 month)) as result; +--------+ | result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec) mysql> select '2009-09-31' between DATE_FORMAT(adddate(now(), interval -1 month),'%Y-%m-01') and last_day(adddate(now(), interval -1 month)) as result; +--------+ | result | +--------+ | 0 | +--------+ 1 row in set (0.00 sec) mysql>
PHP 5.2.10 configure error
2009年6月20日
PHP5.2.10が出たので開発環境へインストール。
5.2.8と同じオプションでconfigureしたのにこんなエラーが出た。
% ./configure --enable-mbstring --enable-soap --enable-zend-multibyte --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-curl --with-curlwrappers --with-gd --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-zlib-dir=/usr/lib --with-mcrypt
.....
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl -dir>/include/curl/
環境は、
# cat /etc/issue Debian GNU/Linux 5.0 \n \l
headerファイルインストールして解決
# aptitude install libcurl4-gnutls-dev
都道府県マスタ・地域マスタ
2009年6月4日
- 都道府県
- 都道府県の知名度
- 地域(関東・東海とか)
の情報を定義するスキーマとデータ。
知名度は、Wikipediaにある2005年時点の人口を元にプライオリティを付けました。
数値が高いほど知名度が高いです。
SQLのデータ(MySQL用): [ダウンロード]
CREATE TABLE IF NOT EXISTS `prefectures` ( `prefectures_id` tinyint(3) unsigned NOT NULL auto_increment, `region_id` int(11) NOT NULL, `prefectures_name` varchar(20) NOT NULL, `prefectures_priority` tinyint(3) unsigned NOT NULL default '0', `prefectures_sort` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`prefectures_id`) ) ENGINE=MyISAM; CREATE TABLE IF NOT EXISTS `region` ( `region_id` int(11) NOT NULL auto_increment, `region_name` varchar(255) NOT NULL, `region_sort` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`region_id`) ) ENGINE=MyISAM;
MySQLのYEARは使うべきではない
2008年8月16日
範囲が狭いし、表現方法が5種類あるし、それぞれに細かいルールがある。
保持できる範囲は1バイト分。’1901′ ~ ’2155′。
http://dev.mysql.com/doc/refman/4.1/ja/year.html

プログラムや、ユーザ入力の内容によっては予期しない動作をする可能性があるので、年だけを扱うならば、UNSIGNED SMALLINTを使うべき。







最近のコメント