カテゴリー【MySQL】
【MySQL】テーブル定義を確認してインデックスを操作する【MariaDB】
POSTED BY
2023-01-20
2023-01-20
すぐに忘れてしまうのでメモ。
まずはテーブル定義を確認する。
show create table article; | Table | Create Table | article | CREATE TABLE `article` ( `id` varchar(128) NOT NULL, `title` text NOT NULL, `plain` text NOT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `title` (`title`), FULLTEXT KEY `plain` (`plain`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
インデックスがいくつかあるようだ。詳細を確認する。
show index from article; +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | article | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | | NO | | article | 1 | title | 1 | title | NULL | NULL | NULL | NULL | | FULLTEXT | | | NO | | article | 1 | plain | 1 | plain | NULL | NULL | NULL | NULL | | FULLTEXT | | | NO | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
上記フルテキストインデックスでの検索だが、ちゃんと含む文字列を指定しているのに出なかったり、いまいちなので、通常のインデックスに変更したい。よって、まずこの全文検索インデックスどもを削除する。
drop index title on article; Query OK, 0 rows affected (0.011 sec) Records: 0 Duplicates: 0 Warnings: 0 drop index plain on article; Query OK, 0 rows affected (0.015 sec) Records: 0 Duplicates: 0 Warnings: 0
削除されたか確認
show index from article; +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | article | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | NO | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ show create table article; | Table | Create Table | article | CREATE TABLE `article` ( `no` float NOT NULL, `id` varchar(128) NOT NULL, `date` timestamp NOT NULL DEFAULT current_timestamp(), `upd_date` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `title` text NOT NULL, `honbun` text NOT NULL, `plain` text NOT NULL, `display` text NOT NULL, `category` varchar(128) NOT NULL, `status` smallint(6) NOT NULL DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
通常のインデックスに作り直す
create index title on article(title); Query OK, 0 rows affected, 1 warning (0.004 sec) Records: 0 Duplicates: 0 Warnings: 1 create index plain on article(plain); Query OK, 0 rows affected, 1 warning (0.009 sec) Records: 0 Duplicates: 0 Warnings: 1
作成されたか確認
show create table article; | Table | Create Table | article | CREATE TABLE `article` ( `no` float NOT NULL, `id` varchar(128) NOT NULL, `date` timestamp NOT NULL DEFAULT current_timestamp(), `upd_date` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), `title` text NOT NULL, `honbun` text NOT NULL, `plain` text NOT NULL, `display` text NOT NULL, `category` varchar(128) NOT NULL, `status` smallint(6) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `title` (`title`(1024)), KEY `plain` (`plain`(1024)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 | show index from article; +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+ | article | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | NO | | article | 1 | title | 1 | title | A | 0 | 1024 | NULL | | BTREE | | | NO | | article | 1 | plain | 1 | plain | A | 0 | 1024 | NULL | | BTREE | | | NO | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
んん…??1024ってなんだ??と調べたら、Sub_partといって、最初の1024バイトのみをインデックスするということらしい。これを256バイトとかにしたければ、
create index title on article(title(256));
などと指定するらしいが、全文検索インデックスではデフォルトはNULL=文字数無制限=であったと思うので、同じように1024でなく無制限にしたい。
なのでNULLを指定して作り直そうとしたら…
drop index plain on article; Query OK, 0 rows affected (0.006 sec) Records: 0 Duplicates: 0 Warnings: 0 create index plain on article(plain(NULL)); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NULL))' at line 1
と、怒られてエラーになってしまった。NULLでなく256とかなら成功するので、通常インデックスは最大でも1024バイトまでなのか…??MariaDBだからかもしれないが…。
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
OpenAI/ChatGPT
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
ドラレコ
※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!ご連絡は以下アドレスまでお願いします★
☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】
【最近の記事】【全部の記事】
nvidia-smiを1秒ごとに実行してGPU使用率をモニタリングTSUKUMOのマルチGPUパソコンWA9J-X211/XTのUbuntu Server 22.04でMYCOEIROINK作成コードを実行し音声合成モデルをトレーニングする
TSUKUMOのマルチGPUパソコンWA9J-X211/XTにUbuntu Server 22.04とCOEIROINK Engineを導入する
Python venv(仮想環境作成)でError: Command returned non-zero exit status 1のエラー対処法
【Ubuntu】プロジェクトごとに複数のPythonバージョンを使い分ける
【PHP】フォーム入力を受け取り出力する
【Ubuntu】aptでインストールしたapache2にソースコンパイルしたphpをマルチスレッドモードで組み込む
【PHP】HTMLファイルを読み込んで文字列変換して出力する
TSUKUMOのマルチGPUパソコンWA9J-X211/XTにUbuntu Server 22.04とVOICEVOX Engineを導入する
【VOICEBOX Engine】403 Forbidden Origin not allowedの対処法
【人気の記事】【全部の記事】
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合進研ゼミチャレンジタッチをAndroid端末化する
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows版Google Driveが使用中と言われアンインストールできない場合
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
【Apache】サーバーに同時接続可能なクライアント数を調整する
Androidホームで左にスワイプすると出てくるニュース共を一切表示させない方法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Googleスプレッドシートを編集したら自動で更新日時を入れる
size_tとssize_tを使い分けてSegmentation Faultを予防する
【カテゴリーリンク】
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
Amazon/AWS
CORESERVER
Google
仮想通貨
LINE
OpenAI/ChatGPT
IBM Watson
Microsoft Azure
Xcode
VMware
MySQL
PostgreSQL
Redis
Groonga
Git/GitHub
Apache
nginx
Postfix
SendGrid
Hackintosh
Hardware
Fate/Grand Order
ウマ娘
将棋
ドラレコ