SQLer 生島勘富 のブログ

RDB・SQLの話題を中心に情報発信をしています。

MVCがなぜ間違っているか?

WebシステムにMVCを適用するのは間違っています(正確にはインターフェースが足りません)。 paperface.hatenablog.com このように思考停止したエンジニアにはわからないかもしれませんが、もう一度解説してみましょう。 目次 目次 そもそもMVCとは? 歴史を…

プロローグ版「SQLの苦手を克服する」オンラインセミナー

以前より行っておりました「SQLの苦手を克服するセミナー」のオンライン版を作りました。 このセミナーは4時間以上かかるため土日の開催になるのですが、前半の内容をプロローグ版として9月30日(水曜日)19時より1時間30分~2時間程度で開催いたします。 オ…

SQLで消費税の処理

こちらで書いた記事のご意見が気になったので少し。 目次 目次 ご意見 テーブル設計における消費税率について マスタ類の設計例 トランザクション類の設計例 消費税率の登録の仕方 SQLで処理するとこうなる ゼロにするときには、ゼロを掛ければ良い トランザ…

MySQLでサブクエリがどうしても遅いときの対処法

他のRDBMSでも起こりますが、特にMySQLでは、サブクエリを使うとどうしても遅いときがあります。 そんなときの対処法は主に2点あります。 目次 目次 テンポラリーテーブルを使う方法 文字列連結でSQLを生成する方法 テンポラリーテーブルを使う方法 DROP TEM…

ゲームを題材に学ぶ 内部構造から理解するMySQL

以前、Software Design の特集記事を執筆しましたが、 sikushima.hatenablog.com 技術評論社のページですべて無料で公開されています。 gihyo.jp ぜひ、ご覧ください。

「SQLの苦手を克服する」セミナー

api-first.connpass.com お時間が合いましたらご参加ください。

拙著『SQLの苦手を克服する本』のご案内

SQLの苦手を克服する本 https://www.amazon.co.jp/gp/product/4297107171 ブログで書いている内容を、もっと分かりやすくしたものです。 例えば、以下の記事の内容も、分かりやすく解説しています。 「SQLを文字列連結して作る必要はない」 sikushima.hatena…

Software Design の特集記事を執筆しました

Software Design 2019年8月号(2019/7/18発売)の第二特集を執筆しました。 gihyo.jp 是非、ご購入いただいて、ご覧いただければ幸いです。 概要 ゲームを題材に学ぶ ー 内部構造から理解するMySQL 定番的オープンソースRDBのMySQLですが,その使い方につい…

DBオブジェクトの命名法と主キー

DBオブジェクトについて、Rails などのようにどうしても「外側から管理したい」と考える人たちは、言語側の命名法で処理したいと考えるようですが、DB側から見ると非常に使いにくいです。 そのため、弊社では以下のような命名法で用途に応じて別名を提供して…

パーティションテーブルについて

はてなの日記からはてなのブログに移り今まで数本の記事を書いてきましたが、Markdownが使えることに今回初めて気づきました(早く言ってよね) ここからは、Markdownで書きます。 目次 目次 パーティションテーブルはなかなか利用されません パーティション…

NoSQL と SQL について

かなり古いネタですが、DeNA の松信氏のブログから NoSQL と SQLについて考えてみましょう。 目次 目次 DeNA の松信氏のブログ DeNA の松信氏がやった実験 一番遅いのはネットワーク SQLは滅茶苦茶重いが、速くもできる! ユーザアクションに対して SQL は極…

SQLと手続き型言語 - JOIN を手続き型で書いてみる

SQL と手続き型言語(オブジェクト指向言語)は最終的には同じです。 今回は、JOIN を手続き型言語(Javaっぽく)書いてみます。 目次 目次 オプティマイズについて 2つの表をJOINしたSQL 単純なネスティッドループ(NESTED LOOP) インデックスを使ったネ…

ほとんどのエンジニアは「Staticオジサン」よりひどい3

前回の続き。 目次 目次 正解はこうなる イメージはこうなる つまりこれはバグ!! 「Staticオジサン」はStatic決め打ち ちなみにWordPressはこんな変換をしています

ほとんどのエンジニアは「Staticオジサン」よりひどい2

前回の続きです。 目次 目次 まずは間違いの例 もう少しマシな人の例 まずは間違いの例 たぶん、何も考えてない人は以下のようになったと思います。 基本構文を分かってない。どうしようもないですね。 もう少しマシな人の例 工夫はしたけれど、残念! 正解…

ほとんどのエンジニアは「Staticオジサン」よりひどい1

「Staticオジサン」が炎上して10年ほど経ちましたが、当時、私が指摘した通りほとんどのエンジニアは「Staticオジサン」よりひどく、10年経っても改善してないどころか、更にひどくなっているのではないかと思います。 目次 目次 自分はできると思う人は例題…

実行計画のキャッシュについて2 - 各RDBMSについて

SQL文の動的生成を避けるには、実行計画のキャッシュを意識しなければなりません。 そこで、RDBMS毎にキャッシュのやり方が違いますからその違いと、「本当はこういう構造にすれば良いのに」という提案について書きます。 目次 目次 各RDBMSの実行計画のキャ…

実行計画のキャッシュについて1 - 分岐を避けるSQL

かつて文字列連結をして、SQL文を構築していた時代がありました。 現在では ORM を利用することが多いかもしれません。 しかし、論理演算をしっかり理解して工夫すれば SQL だけで WHERE句などを分岐せずに作ることが可能です。 目次 目次 分岐(IF文)か計…

SQLでbit演算を使うパターン

WHERE句は論理演算の塊になるため、論理演算の理解は非常に重要です。 論理演算の応用として bit演算も SQL にもあります。 bit演算結果をデータとして保存することは、多用はいけませんが効果が高いこともあるのでご紹介します。 目次 目次 FROM句、WHERE句…

第14・15回 SQL Server 2019勉強会より - はてなブログに引っ越し記念

はてなのブログに引っ越しました。 思い出したようにブログを再開したいと思います。 目次 目次 Twitterは議論に向かない。 私の主張 SQLの方が息が長いからロジックをSQLへ寄せた方が良い SQLが分かりにくいという常識とは? 教育からやり直すべき 嫌いな人…

消費税増税で景気を回復させる!

通常、不況は数年で収束するけれど、 バブル崩壊後、日本は全然立ち上がれない。それは…… バブルが急峻すぎたこと。バブル崩壊と労働人口減少の始まりの時期が重なってしまったこと。なども、原因ではあるけれど、最大の原因は、日本は目の前の出血を極端に…

「艦これ」についてのまとめ #艦これ

「艦これ」についてというには、遠いけれど、「艦これ」からソーシャル系のシステムについて考えた話についてまとめました。 一覧 「艦これ」から、ソーシャル系のサーバ構成を考える http://d.hatena.ne.jp/Sikushima/20130901/1378021345 お手製クラスター…

もうちょっと「艦これ」からSQLを考えてみる4

前回の続き。 DBサーバの処理を肩代わりして負荷を減らせるとしても、 最後のソート(これは問題になるなら禁止すれば良い) IF文 四則演算 だけです。 「IF文、四則演算をAPサーバやクライアントで処理すべき」と考えられるのは、設計段階にSQLでどこまでで…

もうちょっと「艦これ」からSQLを考えてみる3

前回の続き。 前回のパターンであれば、全体を(パフォーマンス・サーバの負荷・開発工数・メンテナンス性)を鑑みて、IF文と四則演算は、DBサーバより、APサーバ。APサーバより、クライアントにある程度キャッシュさせて、処理もクライアントで行った方が良…

もうちょっと「艦これ」からSQLを考えてみる2

前回の続き。 「艦これ」で起きた障害は、カタログスペックの100分の1以下の処理量で発生ししていると思われる。その原因はDBサーバに対する無理解、SQLに対する無理解から起きているのでは?という考察です。 もちろん、中身は知らないけれどね。 どこで処…

シェルが使えないレンタルサーバで Facebook API を使う

PHP 5.2 なら JSON は標準で入っていますからこんな苦労はないですが、レンタルサーバで PHP 5.1.6、シェルは使えない。という環境で Facebook API を使うのに嵌まった。シェルが使えないサーバで開発ってこんなに大変なのね(苦笑) もう二度とやりたくない…

もうちょっと「艦これ」からSQLを考えてみる1

かなり前に下書きをしていたんだけれど、バタバタしていてほったらかしになっていたものです。タイミングがズレたけど、まだ「艦これ」をやっている人がいるみたいなのでアップします。 私が「艦これ」の設計をするなら 「軍艦を擬人化する」という発想は、…

「艦これ」もう少し思い出して考えてみた

「艦これ」はあんまり関係ないのですが、スケールアウトについて。 「艦これ」は既に MySQL Cluster を使っているなら関係ないのですが、何度も書きますけれど、「JOIN禁止」はスケールアウトと関係ない。 Twitter規模になれば別の考え方が必要になりますが…

「艦これ」から、ソーシャル系のサーバ構成を考える

私は、ソーシャル系とは縁遠い仕事ばっかりしているのですが、そういう依頼も若干増えてきたので話題になっている「艦これ」をお盆にやってみた。 残念ながら、「艦これ」の魅力は分からなかった。しかし、ミッションを用意されると、「クリアーしたい」とい…

SQL文を組み立てるには?SQLが書ける様になるには?

SQL文ができない人は、どこまでも文法で考えようとしている。 私が、SQLに違和感を感じずに理解することができたのは、文法を気にしてなかったからで、私の勉強法というか、どうやって習得してきたのかを整理してみました。 例えば IN と EXISTS の違い カラ…

RDBMSを使う以上、SQLを使いこなさなければいけない

何度も何度も言ってるけれど、「処理を分割した方がDBサーバの負荷が減る」と感じるのは勘違い。 http://d.hatena.ne.jp/Sikushima/20110809/ http://d.hatena.ne.jp/Sikushima/20110810/ http://d.hatena.ne.jp/Sikushima/20110811/ http://d.hatena.ne.jp/…