タグ

sqlに関するichiropのブックマーク (31)

  • なぜ、SQLは重たくなるのか?──『SQLパフォーマンス詳解』の翻訳者が教える原因と対策|ハイクラス転職・求人情報サイト AMBI(アンビ)

    なぜ、SQLは重たくなるのか?──『SQLパフォーマンス詳解』の翻訳者が教える原因と対策 『SQLパフォーマンス詳解』の翻訳者の松浦隼人さんに、8つの「SQLが重たくなる原因とその対策」を聞きました。システムのボトルネックになるような「問題のあるSQL」を回避するノウハウを学びましょう。 データの操作や定義をする言語「SQL」は、どのような領域を担うエンジニアにとっても必修科目です。しかし、その仕様をきちんと理解し、パフォーマンスに優れたSQLを書ける方はそれほど多くありません。問題のあるSQLを書いてしまい、知らぬ間にそれがシステムのボトルネックになってしまう事態はよく発生します。 では、どうすればそうした事態を回避できるのでしょうか? そのノウハウを学ぶため、今回は『SQLパフォーマンス詳解』の翻訳者であり、自身もエンジニアでもある松浦隼人(まつうら・はやと/@dblmkt)さんに8つ

    なぜ、SQLは重たくなるのか?──『SQLパフォーマンス詳解』の翻訳者が教える原因と対策|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • Oracle 実用的で簡単なヒント句のつけかた

    なんていう大それたタイトルをつけると 全然わかってねーだろ!と怒る人もいるかと思いますが… (私はOracle Masterも持っていない人ですし) なぜかSQLチューニングやらを仕事でやらされることが多く、 しかしチューニング関係のやサイトは意味不明すぎて。 そんな中、実際にとんでもないSQLとかをなんとか早くする為に 編み出したヒント句のつけかたを紹介します。 軽い気持ちで読んでください。 つけるべきヒント句は6種類だけ だいたいがOracleに任せておけばいいんです。 ヒント句をがっぷりつけたところで状況が変わったら対応できなくなりますので。 私が主につけるヒント句は以下だけです。 テーブル結合に係る部分だけですね。 ordered / leading inxex / full use_nl / use_hash 全部で6つです。これだけなら覚えられるでしょう。 他のは覚えきれない

    Oracle 実用的で簡単なヒント句のつけかた
    ichirop
    ichirop 2016/03/07
  • O/Rマッピングの役割とメリット

    O/Rマッピングは、従来の煩雑なデータベースに関する処理の記述をスマートにし、、柔軟なアプリケーションの構築を可能にします。連載ではオープンソースのO/Rマッピングフレームワーク「Hibernate」を用いてO/Rマッピングの基礎を解説します。そしてさらに、J2EEアプリケーションへの実践的な適用方法とそのメリットも紹介していきます。(編集局)

    O/Rマッピングの役割とメリット
  • 1日に100万レコード増える場合のテーブル設計

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。 PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

    1日に100万レコード増える場合のテーブル設計
    ichirop
    ichirop 2015/11/06
  • IDの設計についてのさらに突っ込んだ議論

    今日も前回に引き続きデータベース設計の話をする。今回の話で一旦データベース設計については筆を置くつもり(ブログ書いてないで原稿書けよ>俺)であるが、その前に話をすっきりさせて置きたいと思う。最後を飾るテーマはIDの設計である。 数字しかないのに意味を含んだID前回のエントリを見ていただいた方から、次のような構造を持った学籍番号があるというフィードバックを頂いた。 全部数値で"入学年度下2桁"+"学科コード"+"学科内のあいうえお順の順位" このようなルールで割り当てた学籍番号を、単なる数値として扱うのであれば大きな問題はない。これは数値しか含まれていないので、SQLのデータ型としては単に数値型を使えば良いだろう。だが、学籍番号から入学年度を判断する、あるいは学科を判断するといった用途で使われるのであればやはり適切ではないといえる。リレーショナルモデルの観点だけからではなく、IDとして適切で

    IDの設計についてのさらに突っ込んだ議論
  • 子要素を再帰的に取ってくるストアドプロシージャ « Coding Suicidal

    なぜ MySQLは、WITH RECURSIVE文をサポートしていないため、たとえば以下のような自己参照テーブル “comments” +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | parent_id | int(11) | YES | | NULL | | | body | varchar(255) | YES | | NULL | | | created_

  • N+1 問題を回避する

    Kodougu では、SQL の Select における N+1 問題を回避することが重要になってきます。 N+1 問題とは、Tree 状の情報を DB から読み出す際、全レコードの取得に一つ+各レコード分だけ SQL を発行してしまう問題です。出来の良い O/R マッパーを使っているとよく引っかかります。 Kodougu のようなモデリングツールだと、この問題には非常によく出くわします。例えば、図上の要素を全て取得してから、要素に関係する関連の一覧を取得するなどを行うような場合です。Rails の ActiveRecord は気軽に DB にアクセスできてしまいますから。以下のコードでは、要素から出て行く関係線の一覧を取得しています。以下のようなコードを書いてしまうと、図を一枚描くたびに要素数分の SQL が発行されてしまいます。 [code: @elements = Element.f

    N+1 問題を回避する
  • SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)

    14. SELECT c1.*, c2.*, c3.*, c4.* FROM Comments c1 -- 1階層目 LEFT OUTER JOIN Comments c2 ON c2.parent_id = c1.comment_id -- 2階層目 LEFT OUTER JOIN Comments c3 ON c3.parent_id = c2.comment_id -- 3階層目 LEFT OUTER JOIN Comments c4 ON c4.parent_id = c3.comment_id -- 4階層目 アンチパターンにより起こること 素朴すぎる故に アンチパターン

    SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
    ichirop
    ichirop 2013/04/23
  • SQLで木と階層構造のデータを扱う――入れ子集合モデル

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

    ichirop
    ichirop 2013/04/23
  • Rails で、Controller に定義されている action を一度に取得する方法はありますか? - QA@IT

    平素よりQA@ITをご利用いただき、誠にありがとうございます。 QA@ITは「質問や回答を『共有』し『編集』していくことでベストなQAを蓄積できる、ITエンジニアのための問題解決コミュニティー」として約7年間運営をしてきました。これまでサービスを続けることができたのは、QA@ITのコンセプトに共感をいただき、適切な質問や回答をお寄せいただいた皆さまのご支援があったからこそと考えております。重ねて御礼申し上げます。 しかしながら、エンジニアの情報入手方法の多様化やQAサービス市場の状況、@ITの今後のメディア運営方針などを検討した結果、2020年2月28日(金)15:00をもちましてQA@ITのサービスを終了することにしました。 これまでご利用をいただきました皆さまには残念なお知らせとなり、誠に心苦しく思っております。何とぞ、ご理解をいただけますと幸いです。 QA@ITの7年間で皆さまの知識

    Rails で、Controller に定義されている action を一度に取得する方法はありますか? - QA@IT
  • Managing an @@IDENTITY Crisis

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support. William Vaughn Beta V Corporation April 2003 Applies to: Microsoft® ADO.NET Microsoft SQL Server™ Summary: Discusses a strategy for returning newly created Identity values after the INSERT is executed. Letting SQL Server generate Identity values might ma

    Managing an @@IDENTITY Crisis
  • max of bit field - SQL Server Forums

    ichirop
    ichirop 2012/03/09
  • value() メソッド (xml データ型) - SQL Server

    適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance XML に対して XQuery を実行し、SQL 型の値を返します。 このメソッドは、スカラー値を返します。 このメソッドは、通常、xml 型の列、パラメーター、または変数に格納されている XML インスタンスから値を取得するために使用します。 この方法では、XML データを XML 以外の列のデータと結合または比較するクエリを指定 SELECT できます。 構文 value ( XQuery , SQLType ) 引数 XQuery XML インスタンス内の データを取得する文字列リテラルである XQuery 式。 XQuery により、返される値は最大 1 つである必要があります。 それ以外の場合は、エラーが返されます。 SQLType 返される優先 SQL 型 (

    value() メソッド (xml データ型) - SQL Server
  • SQLer 生島勘富 の日記

    ichirop
    ichirop 2012/01/05
  • 高木浩光@自宅の日記 - 駄目な技術文書の見分け方 その1

    ■ 駄目な技術文書の見分け方 その1 はてなブックマークのホッテントリを見ていたところ、300を超えるユーザに登録された以下の記事があった。 今夜分かるSQLインジェクション対策, 上野宣, @IT, 2006年11月2日 また上野宣か。顔見知りなのでズバリいくことにする。 しかし、その対策はまだ当に理解されていないように思える。 へえ。 終わりの方を見てみると、 Webアプリケーションの対策 入力値のSQLの特殊文字を適切にエスケープ 入力値=プログラム(プロセス)に外部から入ってくるもの シフトJISの場合には1バイト文字を整理 SQLの記述をなくすためにO/R(Object/Relational)マッピングを活用 攻撃者に役立つ情報を与えないために、不要なエラーメッセージ(データベースが出力するエラーなど)の表示を抑止 対策に「準備された文」(prepared statement)

  • LIKE (Transact-SQL)

    適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス 指定された文字列が指定されたパターンと一致するかどうかを判断します。 パターンは、標準の文字とワイルドカード文字を含むことができます。 パターン検索時に、標準の文字は文字列に指定された文字と正確に一致する必要があります。 しかし、ワイルドカード文字は文字列の任意の部分と一致することができます。 = や != などの文字列比較演算子を使用する場合と比べて、ワイルドカード文字を使用する方がより柔軟に LIKE 演算子を使用できます。 引数が文字列データ型でない

    LIKE (Transact-SQL)
  • SQLの実行時間をミリ秒単位で計測する方法

    開発中にSQLのチューニングを行っていると、処理時間の改善結果をミリ秒単位で計測したい場合があると思います。しかし、Management Studio でSQLを実行した際に画面右下に表示される実行時間は秒単位であるため、ミリ秒単位の計測には向いていません。そこで、簡単にSQLの実行時間を計測できるサンプルを紹介します。 DECLARE @StartTime datetime -- 処理開始時刻保存用変数 SET @StartTime = GETDATE() -- 処理開始時刻設定 /* ↓↓↓ 以下に処理時間を計測したいSQL文を書く(下記は500,000回ループを回すサンプル) */ DECLARE @Counter integer SET @Counter = 0 WHILE (@Counter < 500000) BEGIN SET @Counter = @Counter + 1

  • インデックスの断片化状況を調べる - アジャイルプログラマの日常

    毎回、インデックスの断片化状況を調べる方法を忘れるのでメモしておきます。以下の SQL を実行すれば、一定の割合 (以下では 3 %) 以上断片化したインデックスの名称がわかります。表示する断片化率の閾値を変更するには、 avg_fragmentation_in_percent と比較している値を変更してください。 SELECT a.index_id , name , avg_fragmentation_in_percent FROM sys.dm_db_index_physical_stats( DB_ID() , NULL , NULL , NULL , NULL ) AS a JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id WHERE avg_fragmentation_in

    インデックスの断片化状況を調べる - アジャイルプログラマの日常
  • [SQL]SQLServerのDB内に存際する全テーブルの件数取得(T-SQL)

    先日、隣の人が全テーブルの件数を取得するために、全テーブル分SQLを書いていました。 「めんどくさそう」と他人事ながら思っていました。 で、その後sysobjectsというテーブルからテーブルの一覧を取得できることを知り、それを見て「できそう」と思ったのでやってみました(隣の人には内緒)。 動的SQLを順次実行することにより、結果を取得できるのですが、結果の出方がかっこ悪いので、テーブル変数(一時テーブル)に格納して結果を表示することにしました。コードはこんな感じ。 SET NOCOUNT ON --テーブル変数(結果格納用) DECLARE @TEMP_TABLE table( T_NAME varchar(128) ,T_CNT int ) DECLARE @NAME nvarchar(128) --テーブル名一時領域 DECLARE @SQL nvarchar(128) --実行する

    ichirop
    ichirop 2010/07/23
  • techbank.jp - このウェブサイトは販売用です! - techbank リソースおよび情報