Rumah > Artikel > pangkalan data > Apakah kegunaan indeks dalam pangkalan data MySQL
Indeks ialah "direktori" yang ditambahkan oleh pangkalan data MySQL pada satu atau beberapa lajur dalam jadual untuk mempercepatkan pertanyaan data. Indeks MySQL ialah fail khas, tetapi indeks jadual enjin jenis InnoDB (kami akan menerangkan enjin MySQL dalam artikel akan datang) adalah bahagian penting dalam ruang jadual.
Pangkalan data MySQL menyokong sejumlah 5 jenis indeks iaitu indeks biasa, indeks unik, indeks kunci utama, indeks komposit dan indeks teks penuh Di bawah, saya akan memperkenalkan empat jenis indeks ini satu persatu.
Indeks biasa ialah indeks biasa dalam pangkalan data MySQL indeks biasa Tiada keperluan khas untuk data Peranan indeks biasa adalah untuk mempercepatkan pertanyaan yang lemah.
Contoh menambah pernyataan SQL indeks biasa semasa mencipta jadual data adalah seperti berikut:
create table exp(id int , name varchar(20),index exp_name(name));
Atau gantikan indeks dengan kunci, seperti berikut:
create table exp (id ,int , name varahcr (20) , key exp_name(name));
Dalam arahan SQL di atas, kunci atau indeks bermaksud Tambah indeks, diikuti dengan nama indeks, diikuti dengan lajur dalam kurungan untuk menambah indeks.
Untuk semua pernyataan SQL berkaitan indeks yang diperkenalkan dalam artikel ini, jika tiada arahan khas, indeks boleh digantikan dengan kunci Untuk menyimpan panjang artikel, perkara ini tidak akan diulang pada masa hadapan.
Selain itu, kita juga boleh menambah indeks tanpa menyatakan nama indeks Dalam kes ini, MySQL secara automatik akan menambah nama indeks dengan nama yang sama dengan medan pada indeks.
Hasil pelaksanaan adalah seperti berikut:
Selepas mencipta jadual data, contoh menambah indeks biasa baharu pada jadual adalah seperti berikut:
alter table exp add index exp_id(id);
Hasil pelaksanaan adalah seperti berikut:
Contoh pernyataan SQL untuk memadam indeks biasa selepas mencipta jadual data adalah seperti berikut:
alter table drop index exp_name;
Hasil pelaksanaan adalah seperti berikut:
Perhatikan bahawa dalam arahan di atas, exp_name ialah nama indeks dan bukan nama medan yang mengandungi indeks kita terlupa nama indeks dalam jadual, kita boleh melaksanakan perintah SQL berikut untuk membuat pertanyaan:
show index from exp;
Antaranya, exp ialah nama jadual Hasil pelaksanaan arahan ini adalah seperti berikut:
Seperti yang dapat dilihat dari gambar di atas, selepas menambah indeks biasa, apabila menggunakan desc untuk melihat struktur jadual, Anda akan mendapati bahawa MUL muncul pada lajur Key, yang bermaksud bahawa indeks ditambah pada lajur.
Indeks unik adalah berdasarkan indeks biasa, yang memerlukan semua nilai lajur yang ditambahkan pada indeks hanya boleh muncul sekali. Istilah yang biasa digunakan untuk indeks unik ditambahkan dalam medan seperti nombor ID dan nombor pelajar, tetapi tidak boleh ditambah dalam medan seperti nama dan nama.
Penambahan indeks unik hampir sama dengan indeks biasa, kecuali kunci dan indeks indeks biasa mesti digantikan dengan kunci unik dan indeks unik.
Contoh pernyataan SQL untuk menambah indeks unik semasa membuat jadual data adalah seperti berikut:
create table exp (id int, name varchar(20), unique key (name));
Hasil pelaksanaan arahan di atas adalah seperti berikut:
Seperti yang dapat dilihat, Tambah medan indeks unik Apabila menggunakan perintah desc untuk menanyakan struktur jadual, UNI akan dipaparkan dalam lajur Kunci, menunjukkan bahawa indeks unik telah ditambahkan pada medan.
Contoh pernyataan SQL untuk menambah indeks unik selepas mencipta jadual data adalah seperti berikut:
Contoh pernyataan SQL untuk memadam indeks unik adalah seperti berikut:
alter table exp drop index name;
Keputusan pelaksanaan adalah seperti berikut:
Indeks kunci utama ialah pertanyaan terpantas antara semua indeks dalam pangkalan data, dan setiap jadual data Hanya boleh ada 1 lajur indeks kunci utama. Lajur yang diindeks oleh kunci utama tidak membenarkan data pendua atau nilai nol.
Menambah dan memadam indeks kunci utama sangat serupa dengan indeks biasa dan indeks unik, kecuali kunci itu digantikan dengan kunci utama. Arahan SQL yang berkaitan adalah seperti berikut:
create table exp(id int ,name varchar(20), primary key (id));alter table exp add primary key (id);
Menambahkan lajur indeks kunci utama, PRI akan dipaparkan pada lajur Kunci apabila desc melihat struktur jadual, seperti ditunjukkan di bawah:
Untuk memadam indeks kunci utama, anda boleh melaksanakan arahan:
alter table exp drop primary key;
Ambil perhatian bahawa dalam pernyataan SQL ini, kunci tidak boleh digantikan dengan indeks.
Kadangkala, apabila kami cuba memadamkan indeks kunci utama, MySQL menolak Ini mungkin kerana atribut auto_increment ditambahkan pada medan Kami boleh memadamkan pengubah suai medan dan memadamkan indeks kunci utama medan, seperti berikut :
如果想要创建一个包含不同的列的索引,我们就可以创建符合索引。其实,复合索引在业务场景中应用的非常频繁,比如,如果我们想要记录数据包的内容,则需要将IP和端口号作为标识数据包的依据,这时就可以把IP地址的列和端口号的列创建为复合索引。复合、添加和删除索引创建SQL语句示例如下:
create table exp (ip varchar(15),port int ,primary key (ip,port)); alter table exp add pirmary key(ip ,port); alter table exp dorp priamary key;
复合索引在创建后,在使用desc查看数据表结构时,会在Key列中发现多个PRI,这就表示这些含有PRI的列就是复合索引的列了。如下所示:
注意,复合索引相当于一个多列的主键索引,因此,添加复合索引的任何一个列都不允许数据为空,并且这些列不允许数据完全相同,否则MySQL数据库会报错。如下所示:
全文索引主要是用于解决大数据量的情况下模糊匹配的问题。如果数据库中某个字段的数据量非常大,那么如果我们想要使用like+通配符的方式进行查找,速度就会变得非常慢。针对这种情况,我们就可以使用全文索引的方式,来加快模糊查询的速度。全文索引的原理便是通过分词技术,分析处文本中关键字及其出现的频率,并依次建立索引。全文索引的使用,与数据库版本、数据表引擎乃至字段类型息息相关,主要限制如下:
1、MySQL3.2版本以后才支持全文索引。
2、MySQL5.7版本以后MySQL才内置ngram插件,全文索引才开始支持中文。
3、MySQL5.6之前的版本,只有MyISAM引擎才支持全文索引。
4、MySQL5.6以后的版本,MyISAM引擎和InnoDB引擎都支持全文索引。
5、只有字段数据类型为char、varchar、以及text的字段才支持添加全文索引。
创建、添加以及删除全文索引SQL命令如下:
create table exp (id int ,content text ,filltext key (content))engine=MyISAM; alter table exp add fulltext index (content); alter table exp drop index content;
部分执行结果如下:
在创建了全文索引后,也不能够使用like+通配符的方式进行模糊查询,全文索引的使用有其特定的语法,如下所示:
select * from exp where match(content) against ('a');
其中,match后面的括号里是含有全文索引的字段,against后面的括号里是要模糊匹配的内容。
此外,全文索引的作用并不是唯一的,在很多场景下,我们并不会使用MySQL数据库内置的全文索引,而是使用第三方类似的索引以实现相同的功能。
1、索引是典型的“以空间换时间”的策略,它会消耗计算机存储空间,但是会加快查询速度。
2、索引的添加,尽管加快了在查询时的查询速度,但是会减慢在插入、删除时的速度。因为在插入、删除数据时需要进行额外的索引操作。
3、索引并非越多越好,数据量不大时不需要添加索引。
4、如果一个表的值需要频繁的插入和修改,则不适合建立索引,反制,如果一个表中某个字段的值要经常进行查询、排序和分组的字段则需要建立索引。
5、如果一个字段满足建立唯一性索引的条件,就不要建立普通索引。
Atas ialah kandungan terperinci Apakah kegunaan indeks dalam pangkalan data MySQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!