2017/07/10 SQLアンチパターンNight Part2 https://connpass.com/event/59946/

2017/07/10 SQLアンチパターンNight Part2 https://connpass.com/event/59946/
SQL、書いてますか? こと大規模データ処理の分野においてはSQLはもはや標準インターフェイスであり、 分析やらバッチやらに関わっている皆様は日々大量のSQLクエリーを生産していることと思います。 そこでちょっと気になるのが、 SQLのコーディングスタイルってどうするのが一般的なんだっけ……? という点です。 イマドキはSQLなんてO/R mapperに吐かせることが多いからなのか、 それともコードを広い範囲で共有することがそもそもないからか、 SQLのコーディングスタイルについて見聞きすることは他のプログラミング言語に比べるとだいぶ少なく、 いまいち決定版と言えるスタイルがないなと感じています。 そんなわけで本日は、SQLのコーディングスタイルについての意識を活発化させるべく、 クックパッドでわたし(青木)が使っているコーディングスタイルから特徴的な点を紹介したいと思います。 特に、分析
免責事項 この翻訳は MySQL Server Blog の 記事 をユーザーが翻訳したものであり、Oracle公式の翻訳ではありません。 MySQL開発チームはこのたび Lab版 のMySQLサーバーをリリースしました("MySQL Server 8.0.0 Optimizer" として公開されています) 私が開発したこのリリースの特徴的な機能は (再帰)共通テーブル式…(再帰)CTE, (再帰)サブクエリー処理, WITH [RECURSIVE] 句としても知られています…です。 3年前、私はCTEをエミュレートする方法を ブログ で紹介しました。しかし、MySQLは今や本物のCTEを備えました。偽物ではなく! これはこの新機能の全ての詳細を紹介するブログポストの最初の一つです。 派生テーブルはFROM句のサブクエリーです。下記の太字の部分がそれにあたります。 SELECT … FRO
俺は実務経験をある程度こなしたあと、RDBの知識不足を認識したクチである。改めてRDBを勉強し始めて困ったことの一つは、実行計画の読み方がよくわからないことだった。もちろん、ぐぐればNESTED LOOP JOINが何かとかは出てくるし、公式のマニュアルも参考になる。ただ、webの文献は体系だって解説があるとは限らないし、個人のブログなどは粒度がバラバラで、まとまった量の知識を得るには向いていない。マニュアルも膨大な量があるので慣れていないと目的の文書が書いてあるかどうかすら分からないし、あったとしても必要なレベルの解説があるかどうは分からない。 そこで本書の出番である。既存の書籍にもSQLとパフォーマンスを論じたものはあるにはあるのだが、それに特化した本の存在は、少なくとも俺は知らない。一冊だけ、データベースパフォーマンスアップの教科書 基本原理編 - kagamihogeの日記という極
技術評論社さんから、SQL実践入門を献本いただきました。ありがとうございます。 SQL実践入門の主題 この本の目的は、「パフォーマンスの良いSQLの書き方、特に大量データを処理するSQLの性能向上の方法を理解すること」とあります。そのパフォーマンス向上の為の解として、SQLが内部的にどう処理されているかを表す実行計画の読み解き方を、いろいろなケースを上げながらひたすら解説しています。そして、何故その実行計画になるのか、データ構造やDBの動きとともに説明しています。ということで、実行計画大事という基本かつ当たり前のことを、正面から取り扱っている良質のSQL本です。 SQL実践入門の構成 SQL実践入門の章立ては、下記の通りです。 第1章:DBMSのアーキテクチャ──この世にただ飯はあるか 第2章:SQLの基礎──母国語を話すがごとく 第3章:SQLにおける条件分岐──文から式へ 第4章:集約
Last Updated on: 2018年10月7日Railsで多用されているActiveRecordのインジェクションパターンを簡単に紹介します。出典はrails-sqli.orgなのでより詳しい解説はこちらで確認してください。特に気をつける必要があると思われる物のみをピックアップしました。 Exists?メソッド User.exists? params[:user] params[:user]などの使い方は危険です。RailsはPHPなどと同様にuser[]というパラメーターで配列化します。 ?user[]=1 が入力の場合、 SELECT 1 AS one FROM "users" WHERE (1) LIMIT 1 となり不正なクエリが実行されます。 Calculateメソッド CalculateメソッドはSQLの集約関数を実行するメソッドです。average、calculate
TOPICS Database 発行年月日 2013年01月 PRINT LENGTH 352 ISBN 978-4-87311-589-4 原書 SQL Antipatterns FORMAT 本書はDB設計やSQL記述の際に避けるべき事柄を1章で1つ、25個紹介する書籍です。リレーショナルデータベースを中心に据えたシステム開発には、様々な場面で陥りやすい失敗(アンチパターン)があります。本書はデータベース論理設計、データベース物理設計、クエリの記述、アプリケーション開発という4つのカテゴリに分け、それぞれの分野におけるアンチパターンを紹介し、失敗を避けるためのより良い方法を紹介します。複数の値を持つ属性や再帰的なツリー構造の格納から、小数値の丸めやNULLの扱いに起因する問題、全文検索やSQLインジェクション、MVCアーキテクチャなど、実践的かつ幅広いトピックを網羅します。日本語版では
>himajin100000さん。 ANSI_PADDING設定は影響しない。ですね。英語苦手です。(~_~;) あと比較演算子(=,<,>)とLike演算子でも、結果が変わってくるのですね... >todo36さん。 COLLATE(照合順序)まわりは、私も疑っていたのですが、今回の件では解決できなさそうでした。 まだ少ししか調べていませんが、『比較では後続の空白は無視されます』という規格(ANSI/ISO SQL-92)だと解釈しました。 で、最終桁の半角スペースも含めた検索がある場合には注意が必要だという事だと思います。 逆に、この仕様の方が便利な場合も多いと思いますし... CONVERT(varbinary, column_Name) などでバイナリ比較が、手っ取り早い解決策のようです。 今回はいろいろと良い勉強になりました。また、この辺のドキュメント類をきっちり確認する重要性を
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く