MySQLに関する覚書
Bool値を使いたい時はTINYINT
- 昔からあるイディオムみたいなもの
- ただし、最近は推奨されない雰囲気が出てきた
絵文字を保存したい場合はutf8mb4を使う
TimeStamp型を使ってはいけない
- TimeStamp型は最大値が
2038-01-19 03:14:07
に制限されているので使ってはいけない
- 代わりに
DEFAULT CURRENT_TIMESTAMP
やON UPDATE CURRENT_TIMESTAMP
を使用すること
- cf.
SQLの実行計画を見る
- SELECT文の先頭に
EXPLAIN
を付けて実行する
EXPLAIN SELECT * FROM my_table;
パフォーマンスチューニングの設定
トランザクションのタイムアウト時間
- InnoDBのトランザクションロック時にロック解放まで待機する時間
- デフォルトでは50秒
- 設定の確認は↓のクエリ
mysql> SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
Dockerコンテナ起動時にSQLを実行する
services:
mysql:
image: mysql:latest
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: xxxxxxx
MYSQL_DATABASE: xxxxxxx
MYSQL_USER: xxxxxxx
MYSQL_PASSWORD: xxxxxxx
ports:
- 3306:3306
volumes:
- type: bind
source: "<初期データ保存ディレクトリ>"
target: "/docker-entrypoint-initdb.d"
- ローカルに置いた任意のSQLを
/docker-entrypoint-initdb.d
にバインドさせれば起動時にロードしてくれる