タグ

*SQLに関するkjtecのブックマーク (10)

  • 命名法 - 主キーはサロゲートキーで、テーブル名はナチュラルキーで(笑) - SQLer 生島勘富 のブログ

    完全に新規の案件というのは当に少ないので、実践できることはほぼない理想論ですが、私の理想とするテーブル構造と命名法です。 まずは、サロゲートキーについて サロゲートキーというのは業務上意味のないキーのことです。 例えば、生徒テーブルは、年次・クラスID・生徒番号で一意になるとしましょう。 この「年次・クラスID・生徒番号」の複合キーを主キーとせずに、システム側で採番した一意な値を主キーとすることをサロゲートキーといいます。 「年次・クラスID・生徒番号」はナチュラルキーといいます。 基は全テーブルをサロゲートキーにする方が効率的です。 サロゲートキーを使わない例外 私なりの基準は関係テーブルの場合、他に情報がない場合サロゲートキーは使いません。 例えば ■ 生徒テーブル ID 年次 クラスID 生徒番号 名前 生年月日 …… ■ 科目マスタ ID 名前 …… ■ 履修マスタ(サロゲート

    命名法 - 主キーはサロゲートキーで、テーブル名はナチュラルキーで(笑) - SQLer 生島勘富 のブログ
    kjtec
    kjtec 2019/10/02
  • MySQLの大きなテーブルでのパフォーマンスを改善する10の方法 | Yakst

    MySQLコミュニティマネージャのMorgan Tocker氏による、テーブルサイズが大きくなるにつれてINSERTのパフォーマンスが落ちてきてしまうことを防ぐ様々な方法についてのまとめ。 今日は、パフォーマンス問題を引き起こす原因になる、サイズの大きいテーブルのパフォーマンスを改善することについて書いてみようと思う。このアドバイスのうちのいくつかは、たくさんのテーブルをまとめて大きくなっているデータベースにも適用できるが、大抵の場合、独立した大きなテーブルというのは特に問題になりやすいものだ。 一般的に知られていると思われるのは、テーブルを変更する時のスピードは、そのサイズが大きくなるにつれて遅くなることだ。以下の図は、一般的なB+ツリーインデックスのパフォーマンスを時系列で見たものだ。 このグラフは、MySQL@Facebookの記事から拝借したものだ。これは、insert buffe

    MySQLの大きなテーブルでのパフォーマンスを改善する10の方法 | Yakst
    kjtec
    kjtec 2019/10/02
  • MySQLでテーブルが排他ロック(stateがLocked)になり全部待ち状態になった原因まとめ - NormalBlog.net

    MySQLでテーブルが排他ロックになり、全部待ち状態になり動かなくなりました。 先ず、画面(ブラウザ)に何も応答がなくなってしまったので、 mysql> show processlist; でどのSQLが動いているか確認したところ、以下の順で命令されたSQLがロック状態でした。 重い参照処理(select) 実行中 参照処理(select) Locked 更新処理(insert, update) Locked 参照処理(select) Locked 4.参照処理もロックされているので、画面表示すらも何も出来なくなっていました。 この環境のMySQLのバージョンは5.1です。 今回は、この原因と対応方法を調べたので記録しておきます。 ストレージエンジンがMyISAMだった 結論として、該当テーブルのストレージエンジンにMyISAMを使っていた為でした。 今回の環境でのMySQLのバージョンは

    MySQLでテーブルが排他ロック(stateがLocked)になり全部待ち状態になった原因まとめ - NormalBlog.net
    kjtec
    kjtec 2019/10/02
    テーブルロック
  • SQLのインデックスとそのチューニングについてのオンラインブック

    開発者向けのSQLインデックス解説サイト、管理についての間違いない知識を提供します。 インデックスは開発時には忘れられがちである一方で、非常に効果的なSQLのチューニング方法です。Use The Index, Lukeでは、HibernateなどのORMツールの解説にとどまらず、SQLのインデックスについて基礎から説明します。 Use The Index, LukeはSQLパフォーマンス詳解のWeb上の無料版です。サイトを気に入って頂けたら、ぜひ書籍も購入してみて下さい。また、このサイトの運営をサポートする様々なグッズも販売しています。 MySQLOracleSQL ServerなどにおけるSQLのインデックスUse The Index, Lukeでは、ベンダにとらわれないインデックスの説明を心がけています。製品特有の事柄については、以下のような表示をしています。 Db2 (LUW)U

    SQLのインデックスとそのチューニングについてのオンラインブック
  • メモ帳 - SQL文を最速にする11のポイント...

    SQL文を最速にする11のポイント たとえ最終的な結果が同じでも,SQL文は書き方一つでパフォーマンスがずいぶんと変わってきます。ここでは,速いSQL文を記述するためのポイントや注意点をいくつか紹介しておきましょう。 ●WHEREの左辺で算術演算子や関数を使わない WHERE句の左辺に算術演算や関数を指定すると,インデックスが使われません。例えば, SELECT NAME FROM CUSTOMERS WHERE SAL - TAX > 1000 とすると,たとえSALフィールドにインデックスが定義されていてもテーブル全体を走査してしまいます。こうした場合は, SELECT NAME FROM CUSTOMERS WHERE SAL > TAX + 1000 のように記述すれば良いでしょう。 ●「後方一致」検索はなるべく避ける インデックスが付加されているフィールドであっても,LIKE

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • 複数カラムでユニークキーを作る - 揮発性のメモ2

    複数カラムでユニークキーを作りたいとき、重複があるとエラーになる mysql> ALTER TABLE hoge ADD UNIQUE (a,b,c); ERROR 1062 (23000): Duplicate entry 'aiueokakikukekoaaaaa' for key 2 IGNOREをつけると、重複したカラムは最初の分だけ採用されて正常終了する mysql> ALTER IGNORE TABLE hoge ADD UNIQUE (a,b,c); Query OK, 225165 rows affected (52.52 sec) Records: 225165 Duplicates: 1385 Warnings: 0 ひとつのカラムにユニークキーを作りたいだけなら、重複レコードを削除してしまえば大体問題ない DELETE FROM hoge WHERE a in (SE

    複数カラムでユニークキーを作る - 揮発性のメモ2
    kjtec
    kjtec 2017/02/16
    複数カラム ユニークキー
  • 複合インデックスの落とし穴 | がっとな日々 | ガットコンピューター

    複合インデクスとは、テーブルの複数のカラムを組み合わせて1つのインデクスとするものです。 たとえば、以下のようなカラムを持つ「従業員マスタ」というテーブルに「姓」と「名」で1つのインデクスを作成することを指します。 従業員マスタ 従業員番号 姓 名 性別 住所 生年月日 入社年月日 会社 所属部門 職位 レコード作成日時

    kjtec
    kjtec 2017/02/15
    複合INDEX
  • 数値リテラルをシングルクォートで囲むことの是非 - ockeghem's blog

    高木浩光氏からの批判の一つは、数値リテラルをシングルクォートで囲むことに対する論拠のあいまいさであったように思う。 「性能的にも不利だし」 < 性能の影響は皆無。問題はそこではなく、挙動がSQL仕様で定義されているか。 以下にもう少し掘り下げて考察してみよう。 SQL仕様でどう定義されているか? 以下のようなSQLで、列IDがint型であると仮定しよう DELETE FROM DOCUMENTS WHERE ID=1 この数値リテラル1をシングルクォートで囲んだ場合の動作はどう規定されているか? DELETE FROM DOCUMENTS WHERE ID='1' 今手元にJIS SQLなどの規定がないので記憶に頼って書くしかないが、このような場合は、varchar型などの文字型から、int型への「暗黙の型変換」が実施される。つまり、'1'という文字列は、1という数値(整数)に変換されてか

    数値リテラルをシングルクォートで囲むことの是非 - ockeghem's blog
    kjtec
    kjtec 2017/02/13
  • 索引を作成したのにパフォーマンスが悪いケース

    連載では、Oracleデータベースのパフォーマンス・チューニングの中から、特にSQLのチューニングに注目して、実践レベルの手法を解説する。読者はOracleデータベースのアーキテクチャを理解し、運用管理の実務経験を積んでいることが望ましい。対象とするバージョンは現状で広く使われているOracle9iの機能を基とするが、Oracle 10gで有効な情報も随時紹介していく。(編集局) 連載目次 前回の「パフォーマンスを向上させるSQLの記述法」では、SQLの記述方法を統一することのメリットについて説明しました。SQLの処理ステップを理解し、記述方法を統一することがパフォーマンスへも大きく影響することが理解できたと思います。今回は、索引を使用したデータアクセス方法に絞って、索引を使用するためのSQLの記述方法や、索引を使用した検索時の注意点について説明します。 索引を使用できないケース 「索

    索引を作成したのにパフォーマンスが悪いケース
  • 1