mysql 码农笔记之索引的使用
- 索引是创建在表上的,对数据库表中一列或多列的值进行排序的一种结构,其作用主要在于提高查询的速度,降低数据库系统的性能开销
- 通过索引,查询数据不必读完记录的全部信息进行匹配,而是只查询索引列
- 索引相当于字典中的音序表,要查询某字时可以在音序表中找到,然后直接跳转到那一音序所在位置,而不必从字典第一页开始翻,逐字匹配
- 索引虽能提高查询速度,但在插入记录时会按照索引进行排序,因此降低了插入速度,最好的操作方式是先删除索引,插入大量记录后再创建索引
索引分类
1.普通索引:不附加任何限制条件,可创建在任何数据类型中
2.唯一性索引:使用unique参数可以设置索引为唯一性索引,在创建索引时,限制该索引的值必须唯一,主键就是一种唯一性索引
3.全文索引:使用fulltext参数可以设置索引为全文索引。全文索引只能创建在char、varchar或text类型的字段上。查询数据量较大的字符串类型字段时,效果明显。但只有MyISAM存储引擎支持全文检索
4.单列索引:在表中单个字段上创建的索引,单列索引可以是任何类型,只要保证索引只对应一个一个字段
5.多列索引:在表中多个字段上创建的索引,该索引指向创建时对应的多个字段
6.空间索引:使用spatial参数可以设置索引为空间索引,空间索引只能建立在空间数据类型上比如geometry,并且不能为空,目前只有MyISAM存储引擎支持
(1)在创建表时创建索引
创建普通索引
<code class="language-sql">mysql> create table index1( -> id int, -> name varchar(20), -> sex boolean, -> index(id) -> ); Query OK, 0 rows affected (0.11 sec)</code>
此处在id字段上创建索引,show create table可查看
创建唯一性索引
<code class="language-sql">mysql> create table index2( -> id int unique, -> name varchar(20), -> unique index index2_id(id ASC) -> ); Query OK, 0 rows affected (0.12 sec)</code>
此处使用id字段创建了一个名为index2_id的索引
这里的id字段可以不设置唯一性约束,但这样一来索引就没有作用
创建全文索引
<code class="language-sql">mysql> create table index3( -> id int, -> info varchar(20), -> fulltext index index3_info(info) -> )engine=MyISAM; Query OK, 0 rows affected (0.07 sec)</code>
要注意创建全文索引时只能使用MyISAM存储引擎
创建单列索引
<code class="language-sql">mysql> create table index4( -> id int, -> subject varchar(30), -> index index4_st(subject(10)) -> ); Query OK, 0 rows affected (0.12 sec)</code>
此处subject字段长度是30,而索引长度则是10
这么做的目的在于提高查询速度,对于字符型的数据不用查询全部信息
创建多列索引
<code class="language-sql">mysql> create table index5( -> id int, -> name varchar(20), -> sex char(4), -> index index5_ns(name,sex) -> ); Query OK, 0 rows affected (0.10 sec)</code>
可以看出,这里使用了name字段和sex字段创建索引列
创建空间索引
<code class="language-sql">mysql> create table index6( -> id int, -> space geometry not null, -> spatial index index6_sp(space) -> )engine=MyISAM; Query OK, 0 rows affected (0.07 sec)</code>
这里需要注意空间space字段不能为空,还有存储引擎
(2)在已经存在的表上创建索引
创建普通索引
<code class="language-sql">mysql> create index index7_id on example0(id); Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
这里在现有表的id字段上创建了一条名为index7_id的索引
创建唯一性索引
<code class="language-sql">mysql> create unique index index8_id on example1(course_id); Query OK, 0 rows affected (0.16 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
此处只需要在index关键字前面加上unique即可
至于表中的course_id字段,最要也设置唯一性约束条件
创建全文索引
<code class="language-sql">mysql> create fulltext index index9_info on example2(info); Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
fulltext关键字用来设置全文引擎,此处的表必须是MyISAM存储引擎
创建单列索引
<code class="language-sql">mysql> create index index10_addr on example3(address(4)); Query OK, 0 rows affected (0.16 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
此表中address字段的长度是20,这里只查询4字节,不需要全部查询
创建多列索引
<code class="language-sql">mysql> create index index11_na on example4(name,address); Query OK, 0 rows affected (0.16 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
索引创建好之后,查询中必须有name字段才能使用
创建空间索引
<code class="language-sql">mysql> create spatial index index12_line on example5(space); Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
这里需要注意存储引擎是MyISAM,还有空间数据类型
(3)用alter table语句来创建索引
创建普通索引
<code class="language-sql">mysql> alter table example6 add index index13_n(name(20)); Query OK, 0 rows affected (0.16 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
创建唯一性索引
<code class="language-sql">mysql> alter table example8 add fulltext index index15_info(info); Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
创建单列索引
<code class="language-sql">mysql> alter table example9 add index index16_addr(address(4)); Query OK, 0 rows affected (0.16 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
创建多列索引
<code class="language-sql">mysql> alter table example10 add index index17_in(id,name); Query OK, 0 rows affected (0.16 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
创建空间索引
<code class="language-sql">mysql> alter table example11 add spatial index index18_space(space); Query OK, 0 rows affected (0.06 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
到此,三种操作方式,每种索引类别的建立就都列举了
对于索引,重要的是理解索引的概念,明白索引的种类
更多的是自己的使用经验
最后来看看索引的删除
(4)删除索引
<code class="language-sql">mysql> drop index index18_space on example11; Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0</code>
这里是刚刚创建的一条索引
其中index18_space是索引名,example11是表名

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Terdapat banyak sebab mengapa permulaan MySQL gagal, dan ia boleh didiagnosis dengan memeriksa log ralat. Penyebab umum termasuk konflik pelabuhan (periksa penghunian pelabuhan dan ubah suai konfigurasi), isu kebenaran (periksa keizinan pengguna yang menjalankan perkhidmatan), ralat fail konfigurasi (periksa tetapan parameter), rasuah direktori data (memulihkan data atau membina semula ruang meja), isu ruang jadual InnoDB (semak fail ibdata1) Apabila menyelesaikan masalah, anda harus menganalisisnya berdasarkan log ralat, cari punca utama masalah, dan mengembangkan tabiat sandaran data secara teratur untuk mencegah dan menyelesaikan masalah.

Kunci utama MySQL tidak boleh kosong kerana kunci utama adalah atribut utama yang secara unik mengenal pasti setiap baris dalam pangkalan data. Jika kunci utama boleh kosong, rekod tidak dapat dikenal pasti secara unik, yang akan membawa kepada kekeliruan data. Apabila menggunakan lajur integer sendiri atau UUIDs sebagai kunci utama, anda harus mempertimbangkan faktor-faktor seperti kecekapan dan penghunian ruang dan memilih penyelesaian yang sesuai.

MySQL boleh berjalan tanpa sambungan rangkaian untuk penyimpanan dan pengurusan data asas. Walau bagaimanapun, sambungan rangkaian diperlukan untuk interaksi dengan sistem lain, akses jauh, atau menggunakan ciri -ciri canggih seperti replikasi dan clustering. Di samping itu, langkah -langkah keselamatan (seperti firewall), pengoptimuman prestasi (pilih sambungan rangkaian yang betul), dan sandaran data adalah penting untuk menyambung ke Internet.

MySQL boleh mengembalikan data JSON. Fungsi JSON_EXTRACT mengekstrak nilai medan. Untuk pertanyaan yang kompleks, pertimbangkan untuk menggunakan klausa WHERE untuk menapis data JSON, tetapi perhatikan kesan prestasinya. Sokongan MySQL untuk JSON sentiasa meningkat, dan disyorkan untuk memberi perhatian kepada versi dan ciri terkini.

MySQL tidak boleh berjalan secara langsung di Android, tetapi ia boleh dilaksanakan secara tidak langsung dengan menggunakan kaedah berikut: menggunakan pangkalan data ringan SQLite, yang dibina di atas sistem Android, tidak memerlukan pelayan yang berasingan, dan mempunyai penggunaan sumber kecil, yang sangat sesuai untuk aplikasi peranti mudah alih. Sambungkan jauh ke pelayan MySQL dan sambungkan ke pangkalan data MySQL pada pelayan jauh melalui rangkaian untuk membaca dan menulis data, tetapi terdapat kelemahan seperti kebergantungan rangkaian yang kuat, isu keselamatan dan kos pelayan.

MySQL mempunyai versi komuniti percuma dan versi perusahaan berbayar. Versi komuniti boleh digunakan dan diubahsuai secara percuma, tetapi sokongannya terhad dan sesuai untuk aplikasi dengan keperluan kestabilan yang rendah dan keupayaan teknikal yang kuat. Edisi Enterprise menyediakan sokongan komersil yang komprehensif untuk aplikasi yang memerlukan pangkalan data yang stabil, boleh dipercayai, berprestasi tinggi dan bersedia membayar sokongan. Faktor yang dipertimbangkan apabila memilih versi termasuk kritikal aplikasi, belanjawan, dan kemahiran teknikal. Tidak ada pilihan yang sempurna, hanya pilihan yang paling sesuai, dan anda perlu memilih dengan teliti mengikut keadaan tertentu.

Panduan Pengoptimuman Prestasi Pangkalan Data MySQL Dalam aplikasi yang berintensifkan sumber, pangkalan data MySQL memainkan peranan penting dan bertanggungjawab untuk menguruskan urus niaga besar-besaran. Walau bagaimanapun, apabila skala aplikasi berkembang, kemunculan prestasi pangkalan data sering menjadi kekangan. Artikel ini akan meneroka satu siri strategi pengoptimuman prestasi MySQL yang berkesan untuk memastikan aplikasi anda tetap cekap dan responsif di bawah beban tinggi. Kami akan menggabungkan kes-kes sebenar untuk menerangkan teknologi utama yang mendalam seperti pengindeksan, pengoptimuman pertanyaan, reka bentuk pangkalan data dan caching. 1. Reka bentuk seni bina pangkalan data dan seni bina pangkalan data yang dioptimumkan adalah asas pengoptimuman prestasi MySQL. Berikut adalah beberapa prinsip teras: Memilih jenis data yang betul dan memilih jenis data terkecil yang memenuhi keperluan bukan sahaja dapat menjimatkan ruang penyimpanan, tetapi juga meningkatkan kelajuan pemprosesan data.

Untuk persekitaran pengeluaran, pelayan biasanya diperlukan untuk menjalankan MySQL, atas alasan termasuk prestasi, kebolehpercayaan, keselamatan, dan skalabilitas. Pelayan biasanya mempunyai perkakasan yang lebih kuat, konfigurasi berlebihan dan langkah keselamatan yang lebih ketat. Untuk aplikasi kecil, rendah, MySQL boleh dijalankan pada mesin tempatan, tetapi penggunaan sumber, risiko keselamatan dan kos penyelenggaraan perlu dipertimbangkan dengan teliti. Untuk kebolehpercayaan dan keselamatan yang lebih besar, MySQL harus digunakan di awan atau pelayan lain. Memilih konfigurasi pelayan yang sesuai memerlukan penilaian berdasarkan beban aplikasi dan jumlah data.
