タグ

mysqlに関するk-holyのブックマーク (189)

  • MySQL :: MySQL 8.0 リファレンスマニュアル :: 11.4.10 空間インデックスの作成

    InnoDB および MyISAM テーブルの場合、MySQL では、通常のインデックスを作成する場合と同様の構文を使用して空間インデックスを作成できますが、SPATIAL キーワードを使用します。 空間インデックスのカラムは、NOT NULL と宣言する必要があります。 次の各例では空間インデックスの作成方法を示します。 CREATE TABLE を使用する場合: CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326, SPATIAL INDEX(g)); ALTER TABLE を使用する場合: CREATE TABLE geom (g GEOMETRY NOT NULL SRID 4326); ALTER TABLE geom ADD SPATIAL INDEX(g); CREATE INDEX を使用する場合: CREATE TABLE

  • 第5回 位置情報を保存しよう(前編):位置情報サービスのはじめ方|gihyo.jp … 技術評論社

    今回から2回に分けて、位置情報をDatastoreに格納する方法をいくつか紹介します[1]⁠。 数値型で保存する 緯度経度の情報をデータベースへ格納するときに、もっとも簡単な方法が数値型として保存する方法です。緯度経度がとりうる値の範囲は、以下の通りですので、システムに必要な小数点以下の数字を考慮して型を決めましょう。 はてなフォトライフでは、写真に緯度経度のメタ情報を設定することができますが、高精度な緯度経度情報は必要ないので、型を以下のように指定しています。 latitude decimal(7,4) longitude decimal(7,4) decimal(7,4)という指定は、10進数で7桁のデータで、小数点以下は4桁まで格納するというものです。 あるオブジェクトの緯度経度を保存し、表示するだけならこれだけで十分ですが、位置情報を中心に扱うサービスになると、格納したデータを緯度

    第5回 位置情報を保存しよう(前編):位置情報サービスのはじめ方|gihyo.jp … 技術評論社
  • MySQL TIPS 3 空間情報(geometry)を使って経度・緯度の検索を高速化する - イノベートな非日常

    以下のようなピタゴラスの定理を使った指定した経度緯度に最も近いデータを取得するSQLは結構ありがちですが、CPU負荷が高く効率も悪いのでMySQLに標準搭載となった空間情報(geometry)を使ってみることにします。 SELECT * FROM loc ORDER BY power(abs(latitude - 緯度 ), 2) + power(abs(longitude - 緯度 ), 2) LIMIT 1 MySQLの空間情報(geometry)機能はPostGIS(Postgresカスタマイズ)に比べると貧弱なので、その為の工夫を行います。例えばここのとおりのままだと逆にSQLが遅くなります。 まずは、テーブル定義から 通常のテーブル CREATE TABLE IF NOT EXISTS `loc` ( `loc_id` int(11) NOT NULL auto_incremen

    MySQL TIPS 3 空間情報(geometry)を使って経度・緯度の検索を高速化する - イノベートな非日常
  • 第8回 MySQLのレプリケーション構成 | gihyo.jp

    第8回はMySQLの代表的なスケールアウト構成であるレプリケーション機能について解説します。 レプリケーションとは データベースでのレプリケーションは、多くの場合データを複数のサーバで保持することで、処理性能の拡張性や耐障害性の向上を狙いとしています。レプリケーションによってデータの複製が作成されることにより、1台のサーバに障害が発生した場合でもデータを失うリスクが削減できるほか、システムを継続利用できる可能性が高まります。さらに複数のサーバにデータが複製されている場合は、データ参照処理を分散できる利点があります。 MySQLサーバのレプリケーション機能は2000年5月にリリースされたMySQL 3.23.15から実装されており、MySQLサーバの中でも初期から含まれている機能の一つとなっています。 参考URL C.3.46 Changes in Release 3.23.15 (08 M

    第8回 MySQLのレプリケーション構成 | gihyo.jp
  • InnoDBのREPEATABLE READにおけるLocking Readについての注意点

    日は、MySQL Casual Advent Calendar 2013の20日目である。というわけでカジュアルに小ネタを紹介しよう。 MVCC - Multi Version Concurrency Controlご存知の通り、InnoDBはMVCCを実装している。そのため、分離レベルがREPEATABLE READの場合には、行にロックをかけることなく、一貫した読み取りが可能になっている。 もし、あるトランザクションT1開始後に、別のトランザクションT2によって同じ行が書き換えられてしまった場合には、T1はロールバックセグメントにある古いバージョンの値を読み取ることができるので、T1内で実行したSELECTは常にT1開始時点のデータを参照することができるのである。大事なのでもう一度言うが、REPEATABLE READにおける単純なSELECTでは行ロックは必要ない。 Lost Up

    InnoDBのREPEATABLE READにおけるLocking Readについての注意点
    k-holy
    k-holy 2015/04/13
    InnoDBの分離レベル
  • Kazuho's Weblog: さらば、愛しき論理削除。MySQLで大福帳型データベースを実現するツール「daifuku」を作ってみた

    さらば、愛しき論理削除。MySQLで大福帳型データベースを実現するツール「daifuku」を作ってみた 先のエントリ「論理削除はなぜ「筋が悪い」か」で書いたとおり、データベースに対して行われた操作を記録し、必要に応じて参照したり取り消したりしたいという要求は至極妥当なものですが、多くのRDBは、そのために簡単に使える仕組みを提供していません。 daifukuは、RDBに対して加えられた変更をトランザクション単位でRDB内にJSONとして記録するためのストアドやトリガを生成するコマンドです。 % daifuku dbname tbl1 tbl2 > setup.sql のように実行すると、指定されたテーブル(ここではtbl1とtbl2)にセットすべきトリガや、更新ログを記録するためのテーブル「daifuku_log」を生成するCREATE TABLEステートメントなど、必要なSQL文をset

    k-holy
    k-holy 2015/04/01
    全テーブル分のトリガーを自動作成してくれるのね。面白い
  • MySQL と寿司ビール問題 - かみぽわーる

    MySQL と Unicode Collation Algorithm (UCA) - かみぽわーる に関連するトピックで、 MySQL には寿司ビール問題というのがある。 寿司ビール問題どっかで詳しくお話を聞くべきだよなぁ。。。— RKajiyama (@RKajiyama) March 18, 2015 これはどういう問題かというと、 MySQL の Unicode では binary collation にしてコードポイントで比較しないと🍣と🍺に限らず絵文字が同値判定されるという問題です。 あれ? MySQL の utf8mb4 charset って、4バイト文字同士を比較すると同じ文字扱いされる? SELECT '🍣'='🍺' → 1 MySQL的には寿司とビールは同じ扱い。— とみたまさひろ (@tmtms) December 22, 2014 MySQLで select

    MySQL と寿司ビール問題 - かみぽわーる
    k-holy
    k-holy 2015/03/23
    絵文字なんて滅べばいい
  • Think Different. – A dream does not escape. but I always escapes.

    k-holy
    k-holy 2015/01/08
    UTF-8の非対応文字の件
  • mysql:13823

    From: "Yoshinori Matsunobu" <"Yoshinori Matsunobu" <ymatsunobu@xxxxxxxxxx>> Date: Mon, 26 Mar 2007 07:21:43 +0900 Subject: [mysql 13823] MySQLの現行UTF-8の問題とその対処方法について 松信です。 現時点で、MySQLの日語問題の中で関心が高い項目である、 UTF-8 4バイト文字の扱いについて、 問題の内容、現時点で取れる対処法、およびMySQL ABが 計画している対処案(現行utf8の改良)を以下に記述します。 計画中の対処案については、将来のバージョンで実装されることは確実ですが、 強い要望またはコミュニティからの貢献が無い限り早期の対応は難しいです。 強い要望のある方は、直接私までお知らせ下さいますようお願い致します。 以下、長文ですが

    k-holy
    k-holy 2015/01/08
    多分これに当たってしまった。今のところはSTRICTモードを有効にして弾くべきかな…。
  • MySQL 再起動せずconfigファイルの文法をチェックする方法 - Code Life

    $ mysqld --help --verbose --skip-networking --defaults-file=<path to my.cnf> --pid-file=$(tempfile) 1>/dev/null MySQLのhelpコマンドはヘルプ情報をコマンドライン上に表示しすぐに終了するが、configファイルは読みにいくようでそれを利用し文法のチェックを行う。 また同じシステム上で既にMySQLが起動している場合、干渉することを避ける為 –skip-networking と –pid-file オプションを指定。 注意点 この方法は文法エラーを見つけるだけで値のチェックは行わないので注意する。 ほぼ参考にした記事を翻訳しただけですね。はい 参考 How to check MySQL configuration file syntax? How to syntax-chec

    k-holy
    k-holy 2015/01/08
    my.cnfのテスト方法
  • 『MySQL初心者に贈るインデックスチューニングのポイントまとめ2014』

    サイバーエージェント公式ブログをご覧の皆さんこんばんは、インフラ&コアテク部の須藤(@strsk)です。普段はAmebaのソーシャルゲーム全般のインフラを見つつ、日語ラップの啓蒙をしながら弊社社員を素材にコラ画像をつくったりしています。好きなAAは麻呂です。 はい、というわけで今回はMySQLインデックスチューニングの基的な流れについてまとめてみました。 ソーシャルゲームは更新も参照もめちゃくちゃ多いです。数秒のレプリケーション遅延も致命的なので適切なテーブル、クエリとインデックス設計が重要です。(何でもそうですけど)インデックスが多くなると更新コストなどが懸念されますが、インデックスが正しく使われていないクエリを放置している方が悪です。そんなこんなで、割と例も偏ったりしてるかもしれませんがあしからず。 前提としてはInnoDBを想定しています。MyISAMはほとんど使っていません。

    『MySQL初心者に贈るインデックスチューニングのポイントまとめ2014』
    k-holy
    k-holy 2014/09/22
  • MySQLのロックについて - SH2の日記

    JPOUG> SET EVENTS 20140907 | Japan Oracle User Group (JPOUG)に参加して発表をしてきました。IIJさまのセミナルームは窓からの眺めがすばらしいですね。JPOUGの運営メンバのみなさま、会場を提供してくださったIIJのみなさま、当日お越しいただいたみなさま、どうもありがとうございました。 私のセッションでは「MySQLのロックについて」と題してネクストキーロックなどの説明をしました。プレゼンテーション資料と、調査のために作成したツールを公開します。 プレゼンテーション資料 (PDF) Lock Inspector 1.0 プレゼンテーション資料からリンクしているウェブサイトの一覧です。 MySQL Lists: mysql: Re: InnoDB's inner workings + checkpoints 過去記事の訂正 @kami

    MySQLのロックについて - SH2の日記
  • Where狙いのキー、order by狙いのキー

    SQLアンチパターン 26章「とりあえず削除フラグ」 2015/08/31 @ GMO Yours #ronsakucasual https://atnd.org/events/68902

    Where狙いのキー、order by狙いのキー
    k-holy
    k-holy 2014/09/01
  • MySQL 5.6 でのレプリケーション遅延は危険 : DSAS開発者の部屋

    MySQL 5.6 の検証中に MySQL 5.5 とは違うタイプのレプリケーション遅延を見つけたので紹介します。 MySQL のレプリケーションのおさらい MySQL のレプリケーションは次のような仕組みで動作しています。 マスターの更新トランザクションが binlog を書く スレーブの I/O スレッドがマスターに接続し、 binlog を取得し、 relaylog を書く. マスター側はスレーブからの接続を受け付けると(dump スレッド)、指定された場所から最新までの binlog を転送する binlog が追記されるのを待ってさらにスレーブに送る スレーブのSQLスレッドが relaylog を再生する MySQL 5.5 でよくあったレプリケーション遅延 マスターは並列してトランザクションを処理して、最終的にコミットした順で反映されれば問題ないようになっています。 一方、ス

    MySQL 5.6 でのレプリケーション遅延は危険 : DSAS開発者の部屋
    k-holy
    k-holy 2014/07/23
  • MySQL 5.6で本当にオンラインでDDLが実行できるか検証してみた - oinume journal

    MySQL 5.6での機能強化点(その1) - パフォーマンスと使い勝手を大きく向上 | Think ITに書いてあるようにMySQL 5.6からオンラインでDDLを実行してもレコードのINSERT, UPDATEはできるようになったとあるので、これが当なのか検証してみた。MySQLにおいてレコード数の多いテーブルに対するALTER TABLE文の発行は以前から問題視されていて、pt-online-schema-changeみたいなものを駆使するのが常套手段だった。 検証環境 ConoHa VPS 2GB Ubuntu 14.04 MySQL 5.6.17-0ubuntu0.14.04.1-log my.cnf データはWikipediaのダンプデータのenwiki-20140502-redirect.sql.gz というテーブルを使用。テーブル定義はこんな感じ。 CREATE TABL

    MySQL 5.6で本当にオンラインでDDLが実行できるか検証してみた - oinume journal
    k-holy
    k-holy 2014/06/18
  • とある診断員とSQLインジェクション

    PostgreSQLの行レベルセキュリティと SpringAOPでマルチテナントの ユーザー間情報漏洩を防止する (JJUG CCC 2021 Spring)Koichiro Matsuoka

    とある診断員とSQLインジェクション
    k-holy
    k-holy 2014/05/26
    エスケープは当然として、潜在バグを放置しないようsql-modeにSTRICT_ALL_TABLESを設定した環境で開発しましょう
  • MySQL binlog API は row based mode でこそ、その真価を発揮する!! - tokuhirom's blog

    空前の MySQL binlog API ブームですが、みなさん libreplication の examples/basic-[12] を実行するだけで満足してしまっているようです。しかし、libreplication のおもしろいのは examples/mysql2lucene の方なんです。 3つのロギングモード普段はあまり意識しないかもしれないですが mysql の binlog には statement based, row based, mixed の3種類があります。 statement based は、実際に実行された SQL が記録されます。一部の関数でちょっと危険です。 row based では、実際に変更された行のデータが記録されます。 mixed では、危険な関数をつかった場合などには row based で記録し、そうでなければ statement based

    k-holy
    k-holy 2014/05/19
  • Mysql casual talks vol4

    2015/06/10 db tech showcase 2015 Tokyo ログを貼り付けている部分が見にくくなっていますので、 http://yoku0825.blogspot.jp/search/label/5.7 などでも同じような内容が見られたりします

    Mysql casual talks vol4
    k-holy
    k-holy 2014/05/14
    P16と同じくハマったので…
  • QA@IT サービス終了のお知らせ - @IT

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

    QA@IT サービス終了のお知らせ - @IT
  • MySQL :: MySQL 5.1 リファレンスマニュアル :: 6.5.6 MySQLの DNS の使用

    新たなクライアントが mysqldに接続すると、mysqldによって要求を処理する新規のスレッドが作成されます。このスレッドでは、まずホスト名がホスト名キャッシュにあるかどうかがチェックされます。ない場合は、ホスト名の解決が試行されます。 オペレーティングシステムがスレッドセーフの gethostbyaddr_r()とgethostbyname_r()の呼び出しをサポートしている場合、スレッドではこれを使用してホスト名の解決が実行される。 オペレーティングシステムがスレッドセーフの呼び出しをサポートしていない場合、スレッドでは相互排除ロックを行い、代わりに gethostbyaddr()と gethostbyname()が呼び出される。この場合、他のスレッドでは最初のスレッドが相互排除ロックを解除するまでホスト名キャッシュ内のホスト名を解決できなくなることに注意する。 --skip-nam