😥

MySQLの予約語は大文字に統一したほうがいいのは本当か?

2023/01/28に公開

概要

速度可読性の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