カテゴリー【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
MatLab
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/管理人】
自営業プログラマーです。お仕事ください!ご連絡は以下アドレスまでお願いします★
【キーワード検索】
【最近の記事】【全部の記事】
nohupで常時起動したPythonスクリプトがログを出力しない場合Intel Macbook2020にBootCampで入れたWindows11 Pro 23H2のBluetoothを復活させる
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【人気の記事】【全部の記事】
進研ゼミチャレンジタッチをAndroid端末化する【Apache】サーバーに同時接続可能なクライアント数を調整する
Windows版Google Driveが使用中と言われアンインストールできない場合
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
【Linux】iconv/libiconvをソースコードからインストール
Googleスプレッドシートを編集したら自動で更新日時を入れる
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
【ひかり電話+VoIPアダプタ】LANしか通ってない環境でアナログ電話とFAXを使う
Windows11でMacのキーボードを使うには
【カテゴリーリンク】
Android
iPhone/iPad
Flutter
MacOS
Windows
Debian
Ubuntu
CentOS
FreeBSD
RaspberryPI
HTML/CSS
C/C++
PHP
Java
JavaScript
Node.js
Swift
Python
MatLab
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
ウマ娘
将棋
ドラレコ