1967 件中 581 - 590 件を表示
« 前の 10 件 | 次の 10 件 »
Displaying posts with tag: MySQL (reset)
MySQLと「令和」その2

MySQLでは異なる字が等しいと見なされることがあるということを書きました。

tmtms.hatenablog.com

この動きはMySQLが独自に変なことをしているわけではなく、Unicodeの規則に従っています。

MySQL 8.0 のデフォルトのCollationは Unicode 9.0.0Unicode Collation Algorithm(UCA) に従っています。

文字にはそれぞれ Weight という値が設定されていてソートに使用されています。この値が同じなら等しい文字とみなされます。

Collation

utf8mb4 のデフォルトの Collation は utf8mb4_0900_ai_ci

[さらに読む]
[便乗企画] 「SQL大量発行処理をいかにして高速化するか」for MySQL

ツイッターでこういうのがあったので、便乗してMySQLで考えてみるエントリ。

AP屋さんは読むべき。-- SQL大量発行処理をいかにして高速化するか #linux #oracle https://t.co/UkAMBc7KIB @SlideShareから

— ABE Masanori (@abe_masanori) 2019年4月4日


高速化手法として#1-#10の十個がリストアップされています。

#1 SQL発行数の削減 その?

[さらに読む]
MySQLと「令和」

新元号が「令和」に決まったことなので、MySQLでの扱いについての話を。

普通の文字

「令」も「和」もJIS第一水準に含まれている基本的な文字なので普通に日本語が使用できるcharsetで使用できます。

mysql> create table t (
  utf8mb4 varchar(255) charset utf8mb4,
  utf8mb3 varchar(255) charset utf8mb3,
  utf16 varchar(255) charset utf16,
  utf32 varchar(255) charset utf32,
  cp932 varchar(255) charset cp932,
  eucjpms varchar(255) charset eucjpms,
  sjis varchar(255) charset sjis,
  ujis varchar(255) charset ujis
);

mysql> insert into t values ('令和', '令和', '令和', '令和', '令和', '令和', '令和', '令和');

mysql> select * from t\G
*************************** 1. row ***************************
utf8mb4: 令和
utf8mb3: 令和
  utf16: 令和
  utf32: 令和
  cp932: 令和
eucjpms: 令和
   sjis: 令和
   ujis: 令和

mysql> select hex(utf8mb4), …
[さらに読む]
innotopにmy.cnfや.mylogin.cnfを食わせる方法

TL;DR

  • 何も設定しなくても食うけど、 [client] セクションしか読んでくれないので「読んでない」と思われることが多いっぽい
  • それ以外のセクションを食わせるためには ~/.innotop/innotop.conf に記述が必要だけど割と簡単だよ

innotop はPerl5製で DBD::mysql を使っているので、デフォルトファイルの読み込みは mysql_read_default_filemysql_read_default_group あたりに影響を受ける。 …と思って探してみれば割とさっくり見つかって、

[さらに読む]
MySQL 8.0 Functional Key Parts

MySQL8.0の機能を調べてまとめている。 Functional Key Partsについて読んだまとめ。

dev.mysql.com

MySQL 8.0.13から関数index(functional key parts)がサポートされる。
5.7以前ではカラムの値そのものかカラムのprefixでしかindexを作成することができなかったが、8.0.13からはテーブルに直接入っている値以外でもindexを作成することができるようになる。

  • マルチカラムインデックスでは関数インデックスと通常indexを混在して指定できる
  • ASC, DESC指定は関数インデックスでも可能
  • PKに指定できない
  • PKがない場合 …
[さらに読む]
そのvarchar型のカラムに入っている値が数字だけかどうかを確認する方法

TL;DR

  • なんか SELECT * FROM t1 WHERE CONCAT('',c1 * 1) != c1 であぶりだせるらしいけどなんで? と聞かれたのでその解説。
    • 俺は↑のやり方初めて聞いた。。
  • 個人的には WHERE c1 NOT RLIKE '^[0-9][0-9]*$' でいいんじゃない? と思う。

前提(?) 「数値しか入らないはずのカラムに文字列が入っていてバッチが転けてるので削除しました」
「?? カラムの型は?」
「varchar型です」
「ちょwww」 こんな状態

mysql57 8> SELECT num FROM t1;
+----------------------+
| num |
+----------------------+
| 1 |
| 2 |
| 3 |
| 4 |
| \(^o^)/オワタ |
| 0x12345 …
[さらに読む]
MySQL 8.0 Descending index

MySQL8.0の機能を調べてまとめている。
Descending indexについて読んだまとめ。

dev.mysql.com

MySQL 8.0では、Descending index(DESC, 降順のindex)がサポートされるようになった。 これまではASC(昇順)のindexを逆順にスキャンすることはできたが、パフォーマンス上のペナルティがあった。 Descending indexを使うことで、降順のアクセスでも正順でスキャンすることができる。 optimizerはDESCを含むマルチカラムindexであってもコストを考慮してこれを利用してくれる。

サンプル

c1, c2カラムにasc, descの組み合わせでカラムを作った。
index名はasc, descの頭1文字をとってaかd

mysql> …
[さらに読む]
MySQL 8.0 Invisible indexes

MySQL8.0の機能を調べてまとめている。
invisible indexesについて読んだまとめ。

dev.mysql.com

MySQL 8.0からはinvisible indexesがサポートされる。

invisible indexはoptimizerに使われないindexのこと。 optimizerから見て、visible(利用可能)かinvisible(利用不可)かを選択できるようになった。 invisible indexを利用することで、indexを削除しても影響がないかを確認することが容易になる。
これは結構ありがたい機能で、行数が多かったり、更新頻度が高いテーブルではindexの削除・作成は非常にコストがかかるし、下手にindexを外すとクエリをつまらせてサービスダウンになることもある。

[さらに読む]
MySQL 8.0 Derived Table, Lateral Derived Table

MySQL8.0の機能を調べてまとめている。 Derived Table, Lateral Derived Tableについて読んだまとめ。

DERIVED TABLE

LATERAL DERIVED TABLESや8.0の新機能を説明する前に、DERIVED TABLEについて説明する

dev.mysql.com

DERIVED TABLEとはFROM句のscope内で作るテーブルのことで、例えばFROM句に書いたサブクエリのSELECT等がある。 構文としては以下で、

SELECT ... FROM (subquery) [AS] tbl_name [(col_list)] ...

JSON_TABLE()関数によってJSONカラムからderived tableを作ることもできる

SELECT * FROM JSON_TABLE(arg_list) [AS] tbl_name ...

このとき、

[さらに読む]
NOT NULL指定しないとカラムの確保するストレージサイズが1byte増える

NULLを許容するカラムをつくるとそれぞれのカラムで必要なストレージサイズが1byte増えていた。

以下はexplainでkey長を見てみた様子。 INTは4byteを確保する訳だけど、NULL (DEFAULT NULL)指定したら各カラムで1byte増えているのがわかる。

NULLABLEかの判定に1bit使っていて、丸められて1byte使っているとしたらNULLABLEなカラムがN個あるとして(N/8+1) byte余計に使うかと思ったらそれぞれのカラムで1byte増えてた。。。(idx8, idx9はその境界値が出たりしないかと思って作った)

mysql> CREATE TABLE `t7` (
    ->   `id` int NOT NULL AUTO_INCREMENT,
    ->   `c1` int DEFAULT NULL,
    ->   `c2` int DEFAULT NULL,
    ->   `c3` int DEFAULT NULL,
    ->   `c4` int DEFAULT NULL,
    ->   `c5` int DEFAULT NULL,
    ->   `c6` int DEFAULT NULL,
    ->   `c7` int DEFAULT NULL,
    ->   `c8` …
[さらに読む]
1967 件中 581 - 590 件を表示
« 前の 10 件 | 次の 10 件 »