Rumah  >  Artikel  >  pangkalan data  >  indeks mysql apa maksudnya

indeks mysql apa maksudnya

青灯夜游
青灯夜游asal
2023-04-13 16:13:222193semak imbas

Dalam MySQL, indeks merujuk kepada "indeks", iaitu struktur pangkalan data khas yang terdiri daripada satu atau lebih lajur dalam jadual data. Ia boleh digunakan untuk menanyakan dengan pantas lajur tertentu dalam rekod nilai . Melalui indeks, apabila menanyakan data, anda tidak perlu membaca semua maklumat rekod, tetapi hanya menanyakan lajur indeks jika tidak, sistem pangkalan data akan membaca semua maklumat setiap rekod untuk dipadankan. Oleh itu, menggunakan indeks boleh meningkatkan kelajuan pertanyaan pangkalan data dan meningkatkan prestasi sistem pangkalan data dengan berkesan.

indeks mysql apa maksudnya

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Dalam MySQL, indeks merujuk kepada "indeks", iaitu struktur pangkalan data khas yang terdiri daripada satu atau lebih lajur dalam jadual data. Ia boleh digunakan untuk menanyakan dengan pantas lajur tertentu dalam rekod nilai .

Melalui indeks, apabila menanyakan data, anda tidak perlu membaca semua maklumat yang direkodkan, tetapi hanya menanya lajur indeks. Jika tidak, sistem pangkalan data akan membaca semua maklumat setiap rekod untuk dipadankan.

Indeks boleh dibandingkan dengan urutan fonetik Kamus Xinhua. Sebagai contoh, jika anda ingin mencari perkataan "ku", jika anda tidak menggunakan urutan fonetik, anda perlu mencarinya halaman demi halaman dalam 400 halaman kamus. Walau bagaimanapun, jika anda mengekstrak pinyin untuk membentuk urutan fonetik, anda hanya perlu mencarinya terus daripada jadual fonetik lebih daripada 10 halaman. Ini boleh menjimatkan banyak masa.

Oleh itu, menggunakan indeks boleh meningkatkan kelajuan pertanyaan pangkalan data dan meningkatkan prestasi sistem pangkalan data dengan berkesan.

Mengapa menggunakan indeks

Indeks ialah hubungan antara nilai lajur dan baris rekod yang ditubuhkan dalam susunan tertentu berdasarkan satu atau beberapa lajur dalam jadual Jadual surat-menyurat pada asasnya ialah jadual tersusun yang menerangkan kesesuaian satu-satu antara nilai lajur lajur indeks dan baris rekod dalam jadual asal.

Indeks ialah objek pangkalan data yang sangat penting dalam MySQL Ia adalah asas teknologi penalaan prestasi pangkalan data dan sering digunakan untuk mencapai perolehan semula data dengan pantas.

Dalam MySQL, biasanya terdapat dua cara untuk mengakses data baris jadual pangkalan data:

1) Akses berurutan

Akses berurutan adalah untuk melakukan imbasan jadual penuh pada jadual. Lintas baris demi baris dari awal hingga akhir sehingga anda menemui data sasaran yang memenuhi syarat dalam data baris tidak tersusun.

Akses berjujukan agak mudah untuk dilaksanakan, tetapi apabila terdapat sejumlah besar data dalam jadual, kecekapan adalah sangat rendah. Sebagai contoh, apabila mencari sejumlah kecil data di antara berpuluh-puluh juta data, menggunakan akses berjujukan akan merentasi semua data, yang akan mengambil banyak masa dan jelas akan menjejaskan prestasi pemprosesan pangkalan data.

2) Akses indeks

Akses indeks ialah cara untuk mengakses terus baris rekod dalam jadual dengan merentasi indeks.

Premis menggunakan kaedah ini adalah untuk mencipta indeks pada jadual Selepas mencipta indeks pada lajur, apabila mencari data, anda boleh terus mencari lokasi baris rekod yang sepadan berdasarkan indeks pada. lajur, supaya cepat mencari data. Indeks menyimpan penunjuk kepada nilai data lajur yang ditentukan, mengisih penunjuk ini mengikut susunan isihan yang ditentukan.

Contohnya, dalam jadual maklumat asas pelajar tb_pelajar, jika indeks diwujudkan berdasarkan student_id, sistem mencipta jadual pemetaan daripada lajur indeks kepada rekod sebenar. Apabila pengguna perlu mencari data dengan student_id 12022, sistem mula-mula mencari rekod pada indeks student_id, kemudian mencari terus baris data melalui jadual pemetaan dan mengembalikan baris data. Oleh kerana kelajuan mengimbas indeks secara amnya jauh lebih besar daripada kelajuan mengimbas baris data sebenar, menggunakan indeks boleh meningkatkan kecekapan pangkalan data.

Ringkasnya, tanpa menggunakan indeks, MySQL mesti membaca keseluruhan jadual bermula dari rekod pertama sehingga ia menemui baris yang berkaitan. Lebih besar jadual, lebih banyak masa yang diperlukan untuk menanyakan data. Jika lajur yang ditanya dalam jadual mempunyai indeks, MySQL boleh dengan cepat pergi ke lokasi untuk mencari fail data tanpa perlu melihat semua data, yang akan menjimatkan banyak masa.

Kebaikan dan Kelemahan Indeks

Indeks mempunyai kelebihan yang jelas dan kelemahannya yang tidak dapat dielakkan.

Kelebihan

Kelebihan indeks adalah seperti berikut:

  • Dengan mencipta indeks yang unik, setiap baris data dalam jadual pangkalan data boleh dijamin unik.

  • Boleh menetapkan indeks untuk semua jenis lajur MySQL.

  • boleh mempercepatkan pertanyaan data, yang merupakan sebab utama untuk menggunakan indeks.

  • boleh mempercepatkan sambungan antara jadual dari segi mencapai integriti rujukan data.

  • Apabila menggunakan klausa pengumpulan dan pengisihan untuk pertanyaan data, masa pengumpulan dan pengisihan dalam pertanyaan juga boleh dikurangkan dengan ketara

Kelemahan

Meningkatkan indeks juga mempunyai banyak kelemahan, terutamanya seperti berikut:

  • Mencipta dan menyelenggara kumpulan indeks mengambil masa, dan apabila jumlah data meningkat, Masa juga akan bertambah.

  • Indeks perlu menduduki ruang cakera Selain ruang data yang diduduki oleh jadual data, setiap indeks juga menduduki sejumlah ruang fizikal. Jika anda mempunyai bilangan indeks yang banyak, fail indeks mungkin mencapai saiz fail maksimumnya lebih cepat daripada fail data.

  • Apabila menambah, memadam dan mengubah suai data dalam jadual, indeks juga mesti dikekalkan secara dinamik, yang mengurangkan kelajuan penyelenggaraan data.

Apabila menggunakan indeks, anda perlu mempertimbangkan kebaikan dan keburukan indeks.

Indeks boleh meningkatkan kelajuan pertanyaan, tetapi akan menjejaskan kelajuan memasukkan rekod. Kerana apabila memasukkan rekod ke dalam jadual yang diindeks, sistem pangkalan data akan menyusun mengikut indeks, yang mengurangkan kelajuan memasukkan rekod Kesan kelajuan akan menjadi lebih jelas apabila memasukkan sejumlah besar rekod. Dalam kes ini, cara terbaik ialah memadam indeks dalam jadual dahulu, kemudian masukkan data, dan kemudian buat indeks selepas sisipan selesai.

Prinsip reka bentuk indeks

1) Perlu diingatkan bahawa indeks juga menduduki ruang cakera, jadi lebih banyak lebih baik.

2) Terlalu banyak indeks akan menjejaskan kecekapan pelaksanaan INSERT, DELETE, UPDATE dan pernyataan lain.

3) Tidak disyorkan untuk mencipta indeks jika terdapat terlalu sedikit data.

4) Untuk kekangan unik, indeks unik yang sepadan harus digunakan.

5) Cuba jangan mengindeks medan dengan perbezaan yang rendah. Contohnya: medan jantina jenis penghitungan hanya mempunyai lelaki dan wanita, yang tidak akan mencapai kesan pengoptimuman.

6) Adalah disyorkan untuk mencipta indeks semasa mencipta jadual. Jika terdapat sejumlah besar rekod dalam jadual, semua rekod dalam jadual akan diubah suai selepas lajur dibuat sebagai indeks.

7) Tidak disyorkan untuk membuat indeks untuk medan yang tidak kerap ditanya.

Jenis indeks

类型 作用
普通索引 基本索引方式,无特别说明
唯一性索引 数据唯一,允许有null
主键索引 表中只有一个主键,数据唯一,不允许有null
复合索引 可以包含两个或多个列的索引方式

Hanya pilih jenis indeks yang sepadan mengikut persekitaran yang berbeza.

Buat sintaks indeks

Ambil indeks biasa sebagai contoh sebagai contoh. Apabila mengubah suai jadual untuk mengindeks

create table 表名(
 字段定义…
 index 索引名称(字段));

, anda boleh menggunakan kunci dan bukannya indeks, dan nama indeks boleh ditinggalkan Jika tiada nama indeks ditambahkan, nama medan akan digunakan sebagai nama indeks secara lalai.

alter table 表名 add index 索引名称(字段);

Indeks biasa

Tiada apa yang perlu diberi perhatian, kaedah pengindeksan yang paling asas.

Buat jadual dan buat indeks biasa Lajur indeks ialah id

Lihat struktur jadual di bawah kekunci mewakili indeks biasa

mysql> create table test1(id int,name varchar(5),age tinyint,index index_id(id));

Lihat maklumat indeks

mysql> desc test1;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | YES  | MUL | NULL    |       |
| name  | varchar(5) | YES  |     | NULL    |       |
| age   | tinyint(4) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+

Tambahkan beberapa data pada jadual untuk ujian

mysql> show index from test1\G
*************************** 1. row ***************************
        Table: test1
   Non_unique: 1
     Key_name: index_id		
 Seq_in_index: 1
  Column_name: id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
   Expression: NULL
1 row in set (0.00 sec)

Simulasikan pelaksanaan pernyataan pertanyaan sql melalui

terangkan
mysql> insert into test1 values(1,'张三',21),(2,'李四',22),(3,'王五',23),(4,'赵六',24);
, tanpa melepasi indeks terlebih dahulu , tanya rekod bernama Zhao Liu.

Jenis: SEMUA item menunjukkan imbasan jadual penuh, dan baris: 4 menunjukkan bilangan baris. Kerana Zhao Liu adalah rekod terakhir dalam jadual, pertanyaan merentasi seluruh jadual.

mysql> explain select * from test1 where name='赵六'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test1
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 4
     filtered: 25.00
        Extra: Using where
1 row in set, 1 warning (0.00 sec)
Seterusnya, tanya medan bernama Zhao Liu melalui id lajur indeks.

baris: 1 bermakna hanya satu baris telah diambil dan rekod telah dijumpai.

mysql> explain select * from test1 where id=4\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test1
   partitions: NULL
         type: ref
possible_keys: index_id
          key: index_id
      key_len: 5
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)

Indeks unik Dalam indeks unik, data dalam lajur indeks adalah unik dan tiada nilai pendua boleh muncul digunakan untuk mengekang kandungan dan membenarkan nilai nol.

Sintaks:


Indeks unik biasanya digunakan dalam medan yang nilainya tidak boleh diulang, nombor ID, nombor telefon mudah alih, dsb.

create table 表名(
 字段定义…
 unique key 索引名(字段名));
Buat jadual dan buat indeks unik dengan nombor telefon mudah alih sebagai lajur indeks.

Lihat struktur jadual, UNI di bawah kekunci diwakili sebagai indeks unik

mysql> create table test2(id int,name varchar(5),phone int,unique key unique_key_phone(phone));

Sisipkan data dan uji ciri

mysql> desc test2;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | YES  |     | NULL    |       |
| name  | varchar(5) | YES  |     | NULL    |       |
| phone | int(11)    | YES  | UNI | NULL    |       |
+-------+------------+------+-----+---------+-------+

Lihat jadual data

mysql> insert into test2 values(1,'张三',1111111111);
mysql> insert into test2 values(2,'李四',null);	#可以为null
mysql> insert into test2 values(3,'王五',1111111111);	#值必须唯一
ERROR 1062 (23000): Duplicate entry '1111111111' for key 'unique_key_phone'

mysql> select * from test2;
+------+--------+------------+
| id   | name   | phone      |
+------+--------+------------+
|    2 | 李四   |       NULL |
|    1 | 张三   | 1111111111 |
+------+--------+------------+

Indeks kunci utama Indeks kunci utama adalah untuk menetapkan kunci utama Setiap jadual hanya boleh mempunyai satu kunci utama paling banyak. Nilai lajur kunci utama mestilah unik dan nilai nol tidak dibenarkan.

Sintaks:

buat nama jadual jadual (kunci utama medan); atau buat nama jadual jadual (
takrifan medan); …

nama indeks kunci utama (medan));

Buat jadual dan tetapkannya sebagai indeks kunci utama Lajur indeks ialah id



Lihat struktur jadual dan PRI di bawah kunci Masukkan data ke dalam lajur indeks kunci utama

dan uji ciri
mysql> create table test3(id int primary key,name varchar(5),age tinyint);

Lihat data jadual
mysql> desc test3;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id    | int(11)    | NO   | PRI | NULL    |       |
| name  | varchar(5) | YES  |     | NULL    |       |
| age   | tinyint(4) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+

mysql> insert into test3 values(1,'张三',23);
mysql> insert into test3 values(null,'张三',23);	#不能为null
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert into test3 values(1,'张三',23);	#值不能重复
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Indeks Komposit
mysql> select * from test3;
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | 张三   |   23 |
+----+--------+------+

Indeks komposit boleh mengandungi dua atau lebih lajur. Tiada sintaks khusus, anda boleh mencipta dwi indeks untuk jadual

Buat jadual dan tetapkannya sebagai kunci utama komposit, lajur indeks ialah id, nama

Ciri kunci utama komposit Ia agak berbeza daripada kunci utama Ia hanya perlu mempunyai satu medan yang tidak diulang.

Lihat data jadual
mysql> create table test4 (id int,name varchar(5),age tinyint,primary key(id,name));

[Cadangan berkaitan:
mysql> insert into test4 values(1,'张三',21);
mysql> insert into test4 values(1,'李四',21);
mysql> insert into test4 values(1,'张三',21);	#主键列全重复
ERROR 1062 (23000): Duplicate entry '1-张三' for key 'PRIMARY'
tutorial video mysql

]

Atas ialah kandungan terperinci indeks mysql apa maksudnya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn