😥
MySQLの予約語は大文字に統一したほうがいいのは本当か?
概要
速度と可読性の2つの角度から考えてみます。
速度
大文字と小文字のクエリを10回ずつ実行して、平均速度で検証をする。
*バージョン5.7。クエリキャッシュなし。
大文字で10回検証。
SELECT * FROM XXXX WHERE id = 1000;
2.5、 3.4、 3.0、 2.4、 2.8、 3.5、 4.0、 2.9、 2.5、 3.0
平均値 = 3.0ms
小文字で10回検証。
select * from XXXX where id = 1000;
3.0、 3.1、 3.0、 2.9、 2.7、 3.4、 2.3、 2.9、 2.9、 2.7
平均値 = 2.9ms
"大文字が速い"は都市伝説かもしれません。
もちろん、上記の検証はあまりに簡易的過ぎますが、速度に大差はないことは少し伝わるかなと思います。
可読性
わざと、小文字だと極端に読みにくいようなクエリを準備しました。
-- 小文字
select form_id from form order by order_id ;
-- 大文字
SELECT form_id FROM form ORDER BY order_id ;
小文字の方は、formテーブルとfrom句の区別など一瞬では難しいと思います。
大文字であれば予約語が明確なので、区別が簡単です。
「でもそんなのsequel proとかのGUI使ってたら色で分けてくれる(シンタックスハイライト)から問題なくない?」と思うかもしれません。
-- 小文字
select form_id from form order by order_id ;
-- 大文字
SELECT form_id FROM form ORDER BY order_id ;
それはそれでごもっともです。上のように色でわけてくれますね。しかし、業務をしていると色々な所にSQLを書くことがあると思います。
例えば、コーディングの時でもRawSQLを記載するときは、SQLを文字列で記載する必要があるものもあります。そういう時はシンタックスハイライトはされませんね。
## railsの例
Status.find_by_sql('select s.text, a.username, a.updated_at from statuses s inner join accounts a on a.id = s.account_id where a.id = 1')
またドキュメントなどテキストに記載する時も、シンタックスハイライトは有効にならない場合があります。
こういったリスクを考慮すると、大文字にしておくのが丸いのかなと思います。
まとめ
予約語は大文字が速いは恐らく都市伝説。
可読性を考慮すると大文字の方が好ましい。
Discussion