26. インデックスが使えない構文
・前方がワイルドカードのLIKE文
(SELECT * FROM apartment WHERE layout LIKE ‘%LDK’;)
・否定文(SELECT * FROM apartment WHERE floor IS NOT 3;)
・NULLを検索する場合(SELECT * FROM apartment WHERE floor IS NULL;)
・関数を使用した場合
(SELECT * FROM apartment
WHERE date_format(dt_created, ‘%Y%m%d’)> ‘20190601’)
43. ファイルに出すとこんな感じ
43
mysqld, Version: 5.6.44 (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /var/run/mysqld/mysqld.sock
Time Id Command Argument
# Time: 190617 16:36:37
# User@Host: root[root] @ [172.23.0.3] Id: 475
# Query_time: 57.853915 Lock_time: 0.000078 Rows_sent: 1 Rows_examined: 32010240
SET timestamp=1560756997;
SELECT SQL_CALC_FOUND_ROWS * FROM `user` WHERE name = 'test1' LIMIT 1;
44. MySQL付属の解析ツール(ファイル専用)
・mysqldumpslowというコマンドで解析ツールを実行できる。
44
Count: 1 Time=57.85s (57s) Lock=0.00s (0s) Rows=1.0 (1), root[root]@[172.23.0.3]
SELECT SQL_CALC_FOUND_ROWS * FROM `user` WHERE name = 'S' LIMIT N
Count: 1 Time=0.00s (0s) Lock=0.00s (0s) Rows=0.0 (0), 0users@0hosts
mysqld, Version: N.N.N (MySQL Community Server (GPL)). started with:
# Time: N N:N:N
# User@Host: root[root] @ [N.N.N.N] Id: N
# Query_time: N.N Lock_time: N.N Rows_sent: N Rows_examined: N
use test_database;
SET timestamp=N;
SELECT SQL_CALC_FOUND_ROWS * FROM `user` WHERE name = 'S' LIMIT N
63. 例えば弊社の事例
・BEFORE
・AFTER
SELECT DISTINCT id FROM person
WHERE parent <> 0
AND dt_created >= '2018-12-20 23:40:02';
SELECT DISTINCT id FROM person
WHERE parent <> 0
AND id >= (SELECT id FROM person WHERE dt_created >= '2018-12-20
23:40:02' ORDER BY id LIMIT 1);