タグ

mysqlに関するyasomiのブックマーク (62)

  • MariaDBとMroongaで作る全言語対応超高速全文検索システム

    MariaDBには超高速な全文検索を実現するMroongaストレージエンジンがバンドルされていることを知っていますか?Mroongaを使うと日語だけでなくアジア圏の言語も含むすべての言語をサポートした超高速な全文検索システムを簡単に作ることができます。どれだけ簡単に作ることができるか紹介します。Read less

    MariaDBとMroongaで作る全言語対応超高速全文検索システム
    yasomi
    yasomi 2022/01/04
  • MySQL | Recursive CTEで多階層カテゴリのレコードを取得 - わくわくBank

    INSERT INTO `categories` (`id`, `name`, `parent_id`) VALUES (1, "暮らし", NULL), (2, "料理", 1), (3, "和", 2), (4, "肉じゃか", 3), (5, "味噌汁", 3), (6, "天ぷら", 3), (7, "中華", 2), (8, "イタリアン", 2), (9, "フレンチ", 2), (10, "ペット", 1), (11, "ファッション", 1), (12, "ビジネス", NULL), (13, "経済学", 12), (14, "マーケティング", 12), (15, "経営", 12); mysql> SELECT * FROM `categories`; +----+-----------------------+-----------+ | id | name |

    MySQL | Recursive CTEで多階層カテゴリのレコードを取得 - わくわくBank
    yasomi
    yasomi 2020/10/30
  • DockerでMySQL8.0の環境構築 & 認証方式変更 - わくわくBank

    version: '3' services: db: image: mysql:8.0.14 restart: always ports: - "13306:3306" volumes: - ./.data/db:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_USER: test MYSQL_PASSWORD: test $ docker-compose up -d Creating network "mysql8_default" with the default driver Pulling db (mysql:8.0.14)... 8.0.14: Pulling from library/mysql (省略) Creating mysql8_db_1 ... done $ $ $ docker-compose

    DockerでMySQL8.0の環境構築 & 認証方式変更 - わくわくBank
    yasomi
    yasomi 2020/05/22
  • MySQLで、正しいデータ型を使うことはどのくらい重要なのか? | Yakst

    テーブル設計においてカラムのデータ型を正しく決めることには、どのような利点があるのかについて。単純に扱う値と同じ型を選ぶべきであるというだけではなく、なぜそうあるべきかについて、内部的な効率の面から解説する。 パフォーマンスに関する話の中で、カラムに値を保存するのに正しいデータ型を使うことの重要性を説いているのを聞くことがよくある。例えば、数値はINTやBIGINTで表現し、IPアドレスにはINT UNSIGNEDを使い、VARCHAR(255)の代わりにVARCHAR(60)を使うといったことだ。 このアドバイスは正しい。しかし、今日はもう少し詳細の説明を試みてみようと思う。 理由 この最適化が正しいと思う3つの理由は以下の通りだ。 文字列として数値データを扱うことは、文字コードや照合処理のCPUオーバーヘッドが余計に必要になってしまう。例えば、'Montréal' = 'Montrea

    yasomi
    yasomi 2020/05/21
  • Google Apps Scriptで外部のMySQLデータベースに接続する【GAS】 🌴 officeの杜 🥥

    社内で様々なアプリケーションのデータ記録場所として、Googleスプレッドシートを使っているわけなのですが、スプレッドシートには最大500万セルという制限があり(最近、200万セルから拡張されました)、またLockServiceで排他制御があるとは言え簡易的なものでしかありません。また、Google SpreadsheetとCloud Platformではサポートが異なるので、より安定してるCloud SQLは魅力的。Google Apps Scriptでのアプリ作成の幅がグンっと広がります。Google App Engineというものもあるのですが、GASではなく主にJavaで作成するものなので、あくまでGASでこれまで通り出来るという点が重要です。 今回は、用意したDBサーバや最近流行りのDBaaSサービスで数分で用意できるクラウドデータベースなどを保存先として、クライアントはこれまで

    Google Apps Scriptで外部のMySQLデータベースに接続する【GAS】 🌴 officeの杜 🥥
    yasomi
    yasomi 2020/04/28
  • PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較!|ハイクラス転職・求人情報サイト AMBI(アンビ)

    PostgreSQLMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! オープンソースのデータベースとしてよく比較されるPostgreSQLMySQL。どんな長所・短所があるのでしょう? それぞれの専門家による対談で明らかにします。 エンジニアとして働いていると必ず直面する悩み。それは、「どのリレーショナル・データベース(以下、RDB)を選ぶのが最善なのか?」です。 RDBごとに長所と短所は異なっています。そのため自社サービスにマッチしないRDBを選んでしまうと、それがボトルネックとなり開発・運用にトラブルが生じるケースは少なくありません。 なかでもよく比較検討されるのが、PostgreSQLMySQL。ともにオープンソースRDBのデファクトスタンダードであり、高い性能と数多くの機能を持っています。 では、両者は具体的にどのような長所・短所があるのでしょうか。そ

    PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較!|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • MySQLの16進数の整理と16進数文字列の演算 - Qiita

    mysql> select color, hex(conv(color,16,10) | 0xc0c0c0) from colors; +--------+-----------------------------------+ | color | hex(conv(color,16,10) | 0xc0c0c0) | +--------+-----------------------------------+ | 1234ab | D2F4EB | +--------+-----------------------------------+

    MySQLの16進数の整理と16進数文字列の演算 - Qiita
    yasomi
    yasomi 2020/04/26
  • 【MySQL】SQL内で文字列を16進表現する at softelメモ

    問題 こんなとき データが文字化けしていて、うまくwhere句で抽出できない。 クライアント側の事情でマルチバイト文字を含むSQLが思ったように発行できない。 BLOB型カラムに入っているバイナリにマッチさせたい。 バイナリを登録したい。 答え MySQLだと「0x~~」形式で、文字列の16進表現が使える。 SELECT * FROM T WHERE name = 0xEFBCB3EFBCB4303030343030; /* 'ST000400'(全角含む) */ SELECT * FROM T WHERE name = 0xE38182E38184E38186E38188E3818A; /* 'あいうえお' */ SELECT * FROM T WHERE name = 0x82A082A282A482A682A8; /* sjisの'あいうえお' */ UPDATE T SET nam

    【MySQL】SQL内で文字列を16進表現する at softelメモ
    yasomi
    yasomi 2020/04/26
  • MySQLで中央値を計算する簡単な方法 - BugsDB

    yasomi
    yasomi 2020/04/17
  • MySQLで中央値(Median)を求める方法【データ集計・分析】 | Torii World

    MySQLには中央値(Median)を求めるための関数が用意されていません。MAXやCOUNT、SUMのように簡単に取得することができればいいのですが…。中央値を取るためのロジックを元にSQLで計算してみましょう。 中央値の意味と求め方まずはSQLの前に中央値はどのようなものでどうやって求めるかを理解しましょう。 中央値(Median)とは中央値(Median)とは、データを大きさの順に並べたとき、全体の中央に位置する値のことを指します。 データの数が偶数の場合には中央の2つの値の平均値となります。 データの例この後のMySQLでの方でも例として使うので今回はusersテーブルにデータが入っている状態とします。 7人分のユーザーの名前(name)と年齢(age)があります。 idnameage

    MySQLで中央値(Median)を求める方法【データ集計・分析】 | Torii World
    yasomi
    yasomi 2020/04/17
  • mysqlで中央値(メジアン)を出す方法 - Qiita

    mysqlには中央値を出す関数がない。 中央値のロジックを分解すると、 データを昇順(もしくは降順)に並べて ちょうど真ん中のサンプルを取得 ということになる。 そのロジックを素直に実装した例をしめす。 以下サンプルデータ。 mysql> select * from users order by age ; +---------+-----+ | name | age | +---------+-----+ | john | 20 | | ringo | 20 | | george | 22 | | paul | 29 | | pete | 39 | +---------+-----+ PREPARE SET_STMT FROM 'select age from users order by age limit 1 offset ?'; SELECT FLOOR( COUNT(*) / 2

    mysqlで中央値(メジアン)を出す方法 - Qiita
    yasomi
    yasomi 2020/04/17
  • COUNT 関数を使ってMySQL のインデックスの基本を理解する - LukeSilvia’s diary

    Linux-DB システム構築/運用入門の8章「インデックスのチューニング(前編)」を読んだので、インデックスの基について実際に手を動かしながら勉強してみようと思います。 内容としては、クエリを実行する際に、「インデックスだけにアクセスした場合」と、「データにもアクセスする場合」のI/O 回数の違いが、パフォーマンスにどれだけ影響を与えるか調べてみるというものです。 環境 MySQL Ver 14.7 Distrib 4.1.22, for pc-linux-gnu (i686) using readline 4.3 ストレージエンジン MyISAM 今回は、インデックスだけにアクセスした場合と、データにもアクセスする場合のパフォーマンスの違いについて調べたいので、インデックスの構造が「キーの値, データの位置」となっているMyISAM の方が調査環境に向いていると判断しました。 テスト

    COUNT 関数を使ってMySQL のインデックスの基本を理解する - LukeSilvia’s diary
    yasomi
    yasomi 2020/04/17
  • [MySQL]GROUP_CONCATで縦のデータをカンマ区切りで取得

    複数レコードのデータを連結して取得したい MySQL(MariaDB)で、GROUP_CONCAT を使って、縦に並んだ複数レコードのデータを1列(カンマ区切り)で取得するSQLを書く方法をまとめます。 SQL Serverでは、FOR XML PATH('') を使用して取得できます。 [SQL Server] 縦に並んだデータを横にカンマ区切りの列データで取得する方法 上記記事では SQL Server の例をまとめていますが今回は MySQL で似たようなことをやってみます。 GROUP_CONCAT MySQL(MariaDB)では GROUP BY でグループ化(Group By)した上で、GROUP_CONCAT を使用することで実現します。 MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.19.1 GROUP BY (集約) 関数 GROUP_CON

    [MySQL]GROUP_CONCATで縦のデータをカンマ区切りで取得
    yasomi
    yasomi 2020/04/12
  • MySQLのインデックス作成方法 効いてないと思ったらexplainで確認する | ポテパンスタイル

    MySQLのインデックスの使い方について、サンプルSQLを紹介しながらまとめています。 以下、データベースとして、MySQLのサンプルデータベースEmployeesを使っています。SQL実行結果の表示にはphpMyAdminを使用しています。 MySQLのインデックス作成の構文は以下のとおりです。 ALTER TABLE employees ADD INDEX `birth_date_index` (`birth_date`); 上記のSQLは、employees(社員)テーブルのbirth_date(誕生日)カラムにbirth_date_indexという名前でインデックスを設定します。 適切にインデックスを設定することによって、テーブルの検索やソートのスピードが速くなります。 SELECT first_name, last_name, birth_date FROM employees

    MySQLのインデックス作成方法 効いてないと思ったらexplainで確認する | ポテパンスタイル
    yasomi
    yasomi 2020/04/11
  • MySQLのIndexをはるコツ - Qiita

    Indexを作成すべき列の特長 1. テーブル内のデータ量が多く、少量のレコードを検索する場合 2. WHERE句の条件、結合の条件、ORDER BY句の条件として頻繁に利用する ただし全表走査が目的のテーブルであれば索引は不要 3. NULL値が多いデータから、NULL値以外の検索をする IndexはNULLを含まないのでNULL値以外の検索には効果がある 逆に、Indexを作成すべきでない列の特徴 表の規模が小さいか、表から大部分のレコードを検索する場合 WHERE句等の条件としてあまり仕様されないもの 列の値が頻繁に挿入、更新、削除される Indexは表に新規行が挿入されればIndexにも自動的に値が格納される。そのためデータの検索速度は向上するが挿入、更新、削除の処理では索引のメンテナンス作業が発生し、速度低下につながる WHERE句の条件として使用されるが、列が式の一部として参照

    MySQLのIndexをはるコツ - Qiita
    yasomi
    yasomi 2020/04/11
  • MySQLでインデックスを貼る時に読みたいページまとめ(初心者向け) - Qiita

    書いてあること インデックス…?INDEXって何それ(゚Д゚)?レベルの人が 最低限、MySQLのクエリチューニングなどできるようになるための取っ掛かり/リンク集です。 初心者が取っ掛かりにする程度(あるいはそれ以下)にしか書いてないので、 深掘りしたい場合は、各リンクを読むことを推奨します。 INDEXって? 超ざっくりいうと 作るとデータ参照が速くなるやつ 大量のレコードが入っているテーブルから1行のレコードを検索するのに 頭から順番に検索したら時間がかかります。 INDEXを作成すると、データテーブルとは別に検索用に最適化された状態でデータが保存されます。 このINDEXを使うことで、目的のレコードを迅速に見つけて取り出すことが可能になります。 ※デメリットもあるので注意! ---- 2018.03.16 追記(コメントにて指摘いただいた内容を転写) ---- MySQL 5.6 で

    MySQLでインデックスを貼る時に読みたいページまとめ(初心者向け) - Qiita
    yasomi
    yasomi 2020/04/11
  • 【MySQL】遅いselect文の原因を調査する【explainの読み方】 - Qiita

    key テーブルにアクセスするために使ったindexを示す。 ちなみに、possible_keysは「使える候補」で、実際につかったかどうかはkeyの値を見る。 key_len 選択されたキーの長さ。 インデックスのキー長が短いほうが高速になるので、迷ったら長さの短いほうにインデックスをつけるといい。 rows selectの取得件数の見積もり。 ざっくりとしたものなので、where句次第ではもっと少ない件数が返ってくることもある。 extra ほかに使用している条件などがあれば、ここに出力される。 チューニング方法の例 type=null かつ key=null の場合 →インデックスが張られてない&テーブルのフルスキャンが行われている。 where条件で使うカラムにインデックスを張る。 もしくは、インデックスが張られたカラムをwhere条件の中に追加する。 extra=Using fi

    【MySQL】遅いselect文の原因を調査する【explainの読み方】 - Qiita
    yasomi
    yasomi 2020/04/11
  • SELECT文の評価順序の話 - Qiita

    はじめに この投稿はアイスタイル Advent Calendar 2015の25日目の記事です。 最終日の記事になりますが、今回もDBAの@toshifusaが、RDBMS関連の話題を、地味に淡々と書かせていただきます。 SELECT文とは SQLの構文のうち、データを取得する文がSELECT文になります。 最近はORMSQLを生成してくれるため、素でSQLを書く機会が減ってきているかと思いますが、ORMSQL生成は完璧ではありません。 必ずしも効率の良いSQLを生成する訳でも、自動的に必要なインデックスを作成してくれる訳でもありません。 RDBMSをブラックボックスにせず、何をやっているのかを理解して、ORMと付き合っていくのが正しい態度ではないかと思います。 こんな疑問がわいた経験ないですか? LIMITで出力件数を数件に制限しているのに、なんでこのクエリは遅いんだろう ASで別名

    SELECT文の評価順序の話 - Qiita
    yasomi
    yasomi 2020/04/11
  • WITH句かサブクエリか - まずは蝋の翼から。

    SQLにおいて、サブクエリは可読性下がるからWITH句を使えという話をしばしば聞く。 ただ、最近あえてサブクエリで記述している人がいたので WITH句とサブクエリで何が違うか について考えてみた。 同じ抽出内容だが片方はWITH句、片方はサブクエリで書いた以下のSQLをベースに話す。 WITH句 WITH sub1 AS ( SELECT aaa ,bbb FROM tbl1 ) ,sub2 AS ( SELECT xxx ,yyy FROM tbl2 ) SELECT sub1.aaa ,sub1.bbb ,sub2.xxx ,sub2.yyy FROM sub1 INNER JOIN sub2 ON sub1.aaa = sub2.xxx ; サブクエリ SELECT sub1.aaa ,sub1.bbb ,sub2.xxx ,sub2.yyy FROM (SELECT aaa ,bb

    WITH句かサブクエリか - まずは蝋の翼から。
    yasomi
    yasomi 2020/04/10
  • MySQL の Window 関数を完全に理解する - Qiita

    uid = 1 の行の式にそれ以外の行の値に基づいた式を書くことはできません(もちろんサブクエリを使えばできますが)。 しかし、Window 関数を使えば uid = 1 の行の式に gid = 100 となるすべての行を元に計算した値を使ったりできます。 という説明だけだと「GROUP BY のこと?」と思ってしまうかもしれませんが、GROUP BY だと集計した行が単一行にまとまるのに対して、Window 関数だと元の行はそのままで複数の行から計算した値を結果に含めることができます。 Window 関数は SELECT 句と ORDER BY 句でのみ使用できます。FROM や WHERE や GROUP BY や HAVING による結果のセットに対して Window 関数が適当されるわけなのでまあそうですね。 簡単な例 結果をわかりやすくするために、極端なデータを使います。 CRE

    MySQL の Window 関数を完全に理解する - Qiita
    yasomi
    yasomi 2020/03/16