欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql 添加索引的實(shí)現(xiàn)步驟

 更新時(shí)間:2024年07月22日 10:13:11   作者:潞哥的博客  
索引是一種用于提高查詢效率的數(shù)據(jù)結(jié)構(gòu),通過添加索引,可以加快數(shù)據(jù)的查找速度,本文主要介紹了mysql 添加索引的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下

一、數(shù)據(jù)庫(kù)索引

1、索引(index)的概念

(1)是一個(gè)排序的數(shù)據(jù)結(jié)構(gòu),幫助mysql快速查詢、更新數(shù)據(jù)庫(kù)表中的數(shù)據(jù)
(2)無(wú)須對(duì)整個(gè)表進(jìn)行掃描,通過物理地址就可以找到所需數(shù)據(jù)
(3)為了提高表的搜索效率而對(duì)某些字段的值建立的數(shù)據(jù)結(jié)構(gòu);并不是所有字段都需要?jiǎng)?chuàng)建索引

2、索引的作用

(1)優(yōu)點(diǎn)
①當(dāng)數(shù)據(jù)量很大或查詢涉及多個(gè)表時(shí),使用索引,可以大大地提高數(shù)據(jù)查詢速度,降低數(shù)據(jù)庫(kù)的IO成本;
②通過索引對(duì)數(shù)據(jù)進(jìn)行排序,可以降低數(shù)據(jù)庫(kù)的排序成本,降低CPU的消耗;
③通過創(chuàng)建唯一性索引保證數(shù)據(jù)表數(shù)據(jù)的唯一性;
④可以加快表與表之間的連接
(2)缺點(diǎn)
①增加了數(shù)據(jù)庫(kù)的存儲(chǔ)空間
②降低了表的更新速度,插入和修改數(shù)據(jù)時(shí)花費(fèi)更多的時(shí)間

3、索引的分類

(1)從物理存儲(chǔ)的角度來(lái)劃分:
①聚簇索引:索引順序按照數(shù)據(jù)的物理位置,檢索多行數(shù)據(jù)速度更快
②非聚簇索引:索引順序不是按照數(shù)據(jù)的物理位置,檢索單行數(shù)據(jù)的速度更快
(2)從邏輯的角度來(lái)劃分
普通索引、唯一索引、主鍵索引、組合索引和全文索引

4、索引的添加與使用

(1)添加索引:通過某一個(gè)字段或某些字段添加
(2)索引使用:索引創(chuàng)建完成后無(wú)需調(diào)用,當(dāng)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)查詢的時(shí)候,會(huì)自動(dòng)使用索引

二、索引的分類

1、普通索引(可以有多個(gè),對(duì)應(yīng)MUL)

(1)最基本的索引類型,不要求索引列的值唯一性
(2)創(chuàng)建普通索引的方式

直接創(chuàng)建
create index 索引名稱 on 表名(字段名稱(字段長(zhǎng)度));  #字段長(zhǎng)度可添加
修改表的方式創(chuàng)建
alter table 表名 add index 索引名稱 (字段名稱(字段長(zhǎng)度));
創(chuàng)建表時(shí)創(chuàng)建
create table 表名(字段1,字段2,字段3,primary key(字段名稱),index 索引名稱(字段名稱(字段長(zhǎng)度));

示例

[root@localhost ~]# mysql -uroot -p  #登錄mysql
mysql> create database auth;  #創(chuàng)建auth庫(kù)
mysql> use auth;  #進(jìn)入auth庫(kù)
mysql> create table auth.users(id int(10) not null,  創(chuàng)建users表,建立id字段,數(shù)據(jù)類型int,不為空
    -> name char(20) not null,  
    -> age varchar(10) default '',
    -> primary key(id));
mysql> desc users;  #查看表結(jié)構(gòu),存在3個(gè)字段
mysql> insert into users values('1','zhangsan','20');  
mysql> insert into users values('2','lisi','23');
mysql> insert into users values('3','wangwu','26');  #字段下分別添加內(nèi)容
mysql> select * from users;  #查看表中數(shù)據(jù)
直接創(chuàng)建方法
mysql> create index index_age on auth.users(age);  #在age上創(chuàng)建索引在users表的age字段,index_age:索引名稱
修改表的方式創(chuàng)建
mysql> alter table users add index index_name(name);  #在users表里的name字段創(chuàng)建索引,索引名稱為index_name
mysql> desc users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(10)     | NO   | PRI | NULL    |       |  #主鍵索引對(duì)應(yīng)PRL
| name  | char(20)    | NO   | MUL | NULL    |       |  #普通索引對(duì)應(yīng)MUL
| age   | varchar(10) | YES  | MUL |         |       |
+-------+-------------+------+-----+---------+-------+
mysql> show index from users; 
或者mysql> show keys from users; #查看users表的索引
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-表名--+索引值得唯一性+--索引名稱--+-索引列的序列號(hào)-+-對(duì)應(yīng)的字段 --+-----------+-------------+----------+--------+------+--索引的類型-+---------+---------------+
| users |  唯一    0 | PRIMARY    |            1 | id          | A         |           2 |     NULL | NULL   |      | BTREE      |         |               |
| users |不是唯一  1 | index_age  |            1 | age         | A         |           3 |     NULL | NULL   | YES  | BTREE      |         |               |
| users |          1 | index_name |            1 | name        | A         |           3 |     NULL | NULL   |      | BTREE      |         |               |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

2、唯一索引(可以有多個(gè),對(duì)應(yīng)UNIQUE)

(1)與普通索引的區(qū)別是索引列的所有值必須唯一,但可以有空值;
(2)創(chuàng)建唯一索引的方式
create unique index 索引名稱 on 表名(字段名稱(字段長(zhǎng)度)); #unique:默認(rèn)字段
alter table 表名 add unique 索引名稱 (字段名稱(字段長(zhǎng)度));
示例

mysql> create table auth.kc31(id int(10) not null,  #創(chuàng)建kc31表,存在3個(gè)字段
    -> name char(20) not null,
    -> address varchar(30) default '',
    -> unique index index_address(address));  #unique:唯一性索引
mysql> use auth;
mysql> desc kc31;  #查看kc31表結(jié)構(gòu)
| address | varchar(30) | YES  | UNI |         |       |  #address的UNI:唯一性索引
mysql> show keys from kc31;  #查看Non_unique為0:代表唯一索引
mysql> insert into kc31 values('1','aaa','zhoukou');  #插入數(shù)據(jù)
mysql> insert into kc31 values('2','bbb','zhoukou');  #驗(yàn)證address字段的唯一性
ERROR 1062 (23000): Duplicate entry 'zhoukou' for key 'index_address'  #address字段zhoukou的關(guān)鍵字具有唯一性,所以不能創(chuàng)建
mysql> insert into kc31 values('2','bbb','luoyang');  #將zhoukou改為luoyang可以創(chuàng)建成功
mysql> insert into kc31 values('3','bbb','luohe');  #name字段不具有唯一性,可以創(chuàng)建
mysql> select * from kc31;  
+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | aaa  | zhoukou |
|  2 | bbb  | luoyang |
|  3 | bbb  | luohe   |
+----+------+---------+  #第二字段可以有重復(fù),第三字段因?yàn)橛形ㄒ恍圆荒苤貜?fù)

3、主鍵索引(只能有一個(gè),關(guān)鍵字PRIMARY)

(1)是一種也輸?shù)奈ㄒ凰饕?,指定?ldquo;PRIMARY KEY”
(2)一個(gè)表只能有一個(gè)主鍵,不允許有空值
(3)創(chuàng)建主鍵索引的方式
修改表的創(chuàng)建
alter table 表名 add primary key(字段名稱(字段長(zhǎng)度));
直接指定主鍵
create table 表名(字段1,字段2,primary key(指定字段名稱));
示例

mysql> create table auth.test(id int(10) not null,  #創(chuàng)建test表
    -> class char(20) not null,
    -> primary key(id));  #直接指定主鍵為id字段
mysql> desc test;
| id    | int(10)  | NO   | PRI | NULL    |       |  #PRI主鍵索引
mysql> show index from test\G;
*************************** 1. row ***************************
        Table: test  #表名
   Non_unique: 0  #索引唯一值
     Key_name: PRIMARY  #索引名稱,關(guān)鍵字;PRIMARY
  Column_name: id  #id作為主鍵
mysql> alter table test drop primary key;  #清空主鍵索引
mysql> show index from test  #主鍵索引為空值
mysql> alter table test add primary key(class);  #將test表的class添加為主鍵
mysql> show index from test  #再查詢表結(jié)構(gòu),存在class主鍵

4、主鍵索引和唯一索引的區(qū)別

(1)主鍵索引一定是唯一性索引,但唯一性索引不一定是主鍵索引
(2)一張表可以有多個(gè)唯一性索引,但只允許有提個(gè)主鍵索引
(3)主鍵列不能為空,但唯一索引可以為空
(4)主鍵索引是一種特殊的唯一性索引

mysql> alter table test add primary key(id);  #驗(yàn)證主鍵的唯一性
ERROR 1068 (42000): Multiple primary key defined  #多余的主鍵沒有被定義,不能同時(shí)存在2個(gè)主鍵
mysql> alter table test add unique index_id(id);  #創(chuàng)建id字段唯一性索引,可以有多個(gè)唯一性索引
mysql> show keys from test\G;  #查看test存在2個(gè)唯一性索引
*************************** 1. row ***************************
        Table: test
   Non_unique: 0
     Key_name: PRIMARY  #主鍵索引
  Column_name: class
*************************** 2. row ***************************
        Table: test
   Non_unique: 0
     Key_name: index_id  #唯一索引
  Column_name: id

5、組合索引(單列索引與多列索引)

(1)當(dāng)多條件查詢的時(shí)候我們可以使用組合索引,查詢效率會(huì)更高,因?yàn)楫?dāng)有多個(gè)單列索引時(shí),MySQL只能用到其中那個(gè)它認(rèn)為最有效率的單列索引
(2)支持最左原則,從左往右依次執(zhí)行
(3)創(chuàng)建組合索引的方式
create table 表名(字段1,字段2,字段3,index 索引名稱(字段1名稱 字段2名稱 字段3名稱));
示例

mysql> create table auth.kgc(name char(10) not null,  #創(chuàng)建kgc表
    -> passwd char(50) not null,
    -> sex int(10) not null,
    -> index index_kgc(name,passwd,sex));  #在name,passwd,sex創(chuàng)建組合索引
mysql> show index from kgc\G;  #查看存在3個(gè)索引

6、全文索引

(1)索引類型為FULLTEXT
(2)可以在char、varchar或者test類型的列上創(chuàng)建
create fulltext index 索引名稱 on 表名(字段名稱(字段長(zhǎng)度));
alter table 表名 add fulltext index 索引名稱(字段名稱(字段長(zhǎng)度));
create table 表名(字段1,字段2,字段3,fulltext index 索引名稱(字段名稱(字段長(zhǎng)度));
示例

mysql> create table auth.content(id int(10) not null,
    -> title char(255) not null,
    -> time int(10) null,
    -> primary key(id),
    -> fulltext index_id(id));
ERROR 1283 (HY000): Column 'id' cannot be part of FULLTEXT index  #id字段不是3種數(shù)據(jù)類型,不能在設(shè)置全文索引
mysql> create table auth.content(id int(10) not null, title char(255) not null, time int(10) null, primary key(id), fulltext index_id(title));  #替換為支持的數(shù)據(jù)類型即可
mysql> show index from content\G;
*************************** 2. row ***************************
   Index_type: FULLTEXT  #數(shù)據(jù)類型為全文索引

7、創(chuàng)建索引的依據(jù)

(1)表的主鍵、外鍵都必須有索引
(2)記錄數(shù)超過300行的表應(yīng)該有索引
(3)經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該建立索引
(4)唯一性太差的字段不適合創(chuàng)建索引
(5)更新太頻繁的字段不適合創(chuàng)建索引
(6)將常出現(xiàn)再where子句中的字段,特別是大表的字段,應(yīng)該建立索引
(7)索引應(yīng)該建立在選擇性高的字段上
(8)索引應(yīng)該建在小字段上,對(duì)于大的文本字段甚至超長(zhǎng)字段,不要建索引

8、查看索引的方法

show index from 表名;
show keys from 表名;

9、刪除索引的方法

drop index 索引名稱 on 表名; #刪除普通索引
alter table 表名 drop index 索引名稱; #刪除普通索引
alter table 表名 drop primary key; #刪除主鍵索引

示例

mysql> drop index index_id on content;  #刪除content表下的index_id索引
mysql> alter table content drop primary key;  #刪除ontent表下的主鍵索引
mysql> show index from content;  
Empty set (0.00 sec)  #索引已刪除

三、MySQL事務(wù)

1、事務(wù)的概念

(1)是一種機(jī)制、一個(gè)操作的組合,包含了一組數(shù)據(jù)庫(kù)操作命令,并且把所有的命令作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作請(qǐng)求,即這一組數(shù)據(jù)庫(kù)操作命令要么都執(zhí)行,要么都不執(zhí)行
(2)是一個(gè)不可分割的工作邏輯單元,在數(shù)據(jù)庫(kù)系統(tǒng)上執(zhí)行并發(fā)操作時(shí),事務(wù)是最小的控制單元
(3)適用于多用戶同時(shí)操作數(shù)據(jù)庫(kù)系統(tǒng)的場(chǎng)景,如銀行、保險(xiǎn)公司及證券交易系統(tǒng)等待
(4)通過事務(wù)的整體性以保證數(shù)據(jù)的一致性

2、事務(wù)的ACID特點(diǎn)

(1)原子性(Atomicity)
①事務(wù)是一個(gè)完整的操作,事務(wù)的各元素是不可分割的
②事務(wù)中的所有元素必須作為一個(gè)整體提交或回滾
③如果事務(wù)中的任何元素失敗,則整個(gè)事務(wù)將失敗
(2)一致性(Consistency)
①當(dāng)事務(wù)完成時(shí),數(shù)據(jù)必須處于一致狀態(tài)
②當(dāng)事務(wù)開始前,數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)處于一致狀態(tài)
③在正在執(zhí)行的事務(wù)中,數(shù)據(jù)可能處于不一致的狀態(tài)
④當(dāng)事務(wù)成功完成時(shí),數(shù)據(jù)必須再次回到已知的一致狀態(tài)
(3)隔離性(Isolation)
①對(duì)數(shù)據(jù)進(jìn)行修改的所有并發(fā)事務(wù)是彼此隔離的,表名事務(wù)必須是獨(dú)立的,它不應(yīng)以任何方式依賴于或影響其他事務(wù)
②修改數(shù)據(jù)的事務(wù)可在另一個(gè)使用相同數(shù)據(jù)的事務(wù)開始之前訪問這些數(shù)據(jù),或者在另一個(gè)使用相同數(shù)據(jù)的事務(wù)結(jié)束之后訪問這些數(shù)據(jù)
(4)持久性(Durability)
①值不管系統(tǒng)是否發(fā)生故障,事務(wù)處理的結(jié)果都是永久的
②一旦事務(wù)被提交,事務(wù)的效果會(huì)被永久地保留在數(shù)據(jù)庫(kù)中

3、事務(wù)控制語(yǔ)句

(1)MySQL事務(wù)默認(rèn)是自動(dòng)提交,當(dāng)SQL語(yǔ)句提交時(shí)事務(wù)遍自動(dòng)提交
(2)事務(wù)控制語(yǔ)句
①begin:開啟一個(gè)事務(wù)
②rollback:回滾一個(gè)事務(wù),回滾到 begen之前地狀態(tài)
③commit:提交一個(gè)事務(wù)
④savepoint identifier:在事務(wù)中創(chuàng)建一個(gè)保存點(diǎn),一個(gè)事務(wù)可以有多個(gè)savepoint
⑤release savepoint identifier:刪除一個(gè)事務(wù)的保存點(diǎn)(與保存的數(shù)據(jù)無(wú)影響)
⑥r(nóng)ollback to identifier:回滾到一個(gè)事務(wù)的保存點(diǎn)
⑦set transaction:用來(lái)設(shè)置事務(wù)的隔離級(jí)別

4、手動(dòng)對(duì)事務(wù)進(jìn)行控制的方法

(1)事務(wù)處理命令控制事務(wù)
①begin:開始一個(gè)事務(wù)
②commit:提交一個(gè)事務(wù)
③rollback:回滾一個(gè)事務(wù)(位于begin和commit之間)
(2)使用set命令進(jìn)行控制
①set autocommit=0:禁止自動(dòng)提交(手動(dòng)提交事務(wù))
②set autocommit=1:開啟自動(dòng)提交

5、實(shí)驗(yàn):手動(dòng)控制事務(wù)

(1)驗(yàn)證手動(dòng)控制事務(wù)不提交則不會(huì)保存

[root@localhost ~]# mysql -uroot -p  #啟動(dòng)數(shù)據(jù)庫(kù)
mysql> create database imployee_salary;  #創(chuàng)建imployee_salary數(shù)據(jù)庫(kù)
mysql> use imployee_salary;  #進(jìn)入imployee_salary數(shù)據(jù)庫(kù)
mysql> create table IT_salary(員工ID char(10),
    -> 崗位類別 char(20),
    -> 姓名 char(10),
    -> 年齡 char(10),
    -> 學(xué)歷 char(10),
    -> 薪資 char(10),
    -> primary key(員工ID));
mysql> desc it_salary;
+--------------+----------+------+-----+---------+-------+
| Field        | Type     | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| 員工ID       | char(10) | NO   | PRI | NULL    |       |
| 崗位類別     | char(20) | YES  |     | NULL    |       |
| 姓名         | char(10) | YES  |     | NULL    |       |
| 年齡         | char(10) | YES  |     | NULL    |       |
| 學(xué)歷         | char(10) | YES  |     | NULL    |       |
| 薪資         | char(10) | YES  |     | NULL    |       |
+--------------+----------+------+-----+---------+-------+
mysql> begin;  #開啟事務(wù)
mysql> insert into it_salary values('1','硬件工程師','小王','22','???,'8000');
mysql> insert into it_salary values('2','windows工程師','小張','23','本科','9000');
mysql> insert into it_salary values('4','Linux工程師','小楊','25','本科','12000');
mysql> select * from it_salary;
+----------+------------------+--------+--------+--------+--------+
| 員工ID   | 崗位類別          | 姓名   | 年齡    | 學(xué)歷   | 薪資   |
+----------+------------------+--------+--------+--------+--------+
| 1        | 硬件工程師        | 小王   | 22     | 專科    | 8000   |
| 2        | windows工程師     | 小張   | 23     | 本科    | 9000   |
| 4        | Linux工程師       | 小楊    | 25    | 本科    | 12000  |
+----------+------------------+--------+--------+--------+--------+
mysql> exit  #退出
[root@localhost ~]# mysql -uroot -p  #重新登錄數(shù)據(jù)庫(kù)
mysql> show tables from imployee_salary;  #能夠查到it_salary數(shù)據(jù)表
mysql> select * from it_salary;  #數(shù)據(jù)已經(jīng)不存在
說(shuō)明:此時(shí)數(shù)據(jù)庫(kù)中并沒有之前插入的數(shù)據(jù),說(shuō)明使用begin開啟服務(wù),執(zhí)行數(shù)據(jù)操作語(yǔ)句后,必須使用commit提交事務(wù),否則數(shù)據(jù)是不能自動(dòng)提交的。
(2)rollback(回滾)的使用
mysql> use imployee_salary;
mysql> begin;  #開啟事務(wù)
mysql> insert into it_salary values('1','硬件工程師','小王','22','???,'8000');
mysql> insert into it_salary values('2','windows工程師','小張','23','本科','9000');
mysql> select * from it_salary;  #存在添加的兩行數(shù)據(jù)
mysql> rollback;  #回滾事務(wù)
mysql> select * from it_salary;  #數(shù)據(jù)已經(jīng)不存在
說(shuō)明:使用begin開始事務(wù),然后執(zhí)行了插入語(yǔ)句后可以看到插入的數(shù)據(jù),但是執(zhí)行rollback回滾命令后,之前的數(shù)據(jù)已經(jīng)沒有了
(3)savepoint(定義回滾點(diǎn))的使用
mysql> begin;  #開啟事務(wù)
mysql> insert into it_salary values('1','硬件工程師','小王','22','???,'8000');  #插入一個(gè)數(shù)據(jù)
mysql> savepoint s1;  #定義s1回滾點(diǎn)
mysql> insert into it_salary values('2','windows工程師','小張','23','本科','9000');  #插入第二個(gè)數(shù)據(jù)
mysql> savepoint s2;  #定義s2回滾點(diǎn)
mysql> select * from it_salary;  #存在插入的2行數(shù)據(jù)

如果后面執(zhí)行rollback命令,這兩條數(shù)據(jù)都將丟失。

mysql> rollback to savepoint s1;  #回滾到s1
mysql> select * from it_salary;  #只存在一條數(shù)據(jù)
+----------+-----------------+--------+--------+--------+--------+
| 員工ID   | 崗位類別        | 姓名   | 年齡   | 學(xué)歷   | 薪資   |
+----------+-----------------+--------+--------+--------+--------+
| 1        | 硬件工程師      | 小王   | 22     | 專科   | 8000   |
+----------+-----------------+--------+--------+--------+--------+
mysql> rollback to savepoint s2;  #嘗試回滾到s2
ERROR 1305 (42000): SAVEPOINT s2 does not exist  #數(shù)據(jù)無(wú)法回滾
說(shuō)明:回滾到s1,第一條插入的數(shù)據(jù)可以查詢出來(lái),但是無(wú)法回退到s2了
(4)使用set命令控制事務(wù)
mysql> set autocommit=0;  #改為手動(dòng)提交事務(wù)
mysql> insert into it_salary values('2','windows工程師','小張','23','本科','9000');
mysql> commit;  #提交事務(wù),數(shù)據(jù)永久保存
說(shuō)明:若commit提交事務(wù)后,則數(shù)據(jù)無(wú)法進(jìn)行回滾

四、存儲(chǔ)引擎

1、存儲(chǔ)引擎介紹

(1)MySQL中的數(shù)據(jù)用各種不同地技術(shù)存儲(chǔ)在文件中,每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制、索引技巧、鎖定水平并最終提供不同的功能和能力,這些不同的技術(shù)以及配套地功能在MySQL中稱為存儲(chǔ)引擎
(2)存儲(chǔ)引擎是MySQL將數(shù)據(jù)存儲(chǔ)在文件系統(tǒng)中的存儲(chǔ)方式或者存儲(chǔ)格式
(3)MySQL常用的存儲(chǔ)方式
①M(fèi)yISAM;②innoDB
(4)MySQL數(shù)據(jù)庫(kù)中的組件,負(fù)責(zé)執(zhí)行實(shí)際的數(shù)據(jù)I/O操作
(5)MySQL系統(tǒng)中,存儲(chǔ)引擎處于文件系統(tǒng)之上,在數(shù)據(jù)保存到文件系統(tǒng)之前會(huì)傳輸?shù)酱鎯?chǔ)引擎,之后按照各個(gè)存儲(chǔ)引擎的存儲(chǔ)格式進(jìn)行儲(chǔ)存

2、MyISAM的介紹

(1)MyISAM不支持事務(wù),也不支持外鍵
(2)訪問速度快
(3)對(duì)事務(wù)完整性沒有要求
(4)MyISAM在磁盤上存儲(chǔ)成三個(gè)文件
①表結(jié)構(gòu)文件(.frm文件)
②數(shù)據(jù)文件的擴(kuò)展名為.MYD(MYData)
③索引文件的擴(kuò)展名是.MYI(MYIndex)
(5)表級(jí)鎖定形式,數(shù)據(jù)在更新時(shí)鎖定整個(gè)表
(6)數(shù)據(jù)庫(kù)在讀寫過程中相互阻塞
①會(huì)在數(shù)據(jù)寫入的過程中阻塞用戶數(shù)據(jù)的讀取
②也會(huì)在數(shù)據(jù)讀取的過程中阻塞用戶的數(shù)據(jù)寫入
(7)數(shù)據(jù)單獨(dú)寫入或讀取,速度較快且占用資源相對(duì)少
(8)MyIAM支持的存儲(chǔ)格式
①靜態(tài)表;②動(dòng)態(tài)表;③壓縮表

3、MyISAM適用的生產(chǎn)場(chǎng)景

(1)公司業(yè)務(wù)不需要事務(wù)的支持
(2)單方面讀取或?qū)懭霐?shù)據(jù)比較多的業(yè)務(wù)
(3)MyISAM存儲(chǔ)引擎不適合數(shù)據(jù)讀寫都比較頻繁的場(chǎng)景
(4)對(duì)數(shù)據(jù)業(yè)務(wù)一致性要求不是非常高的業(yè)務(wù)
(5)服務(wù)器硬件資源相對(duì)比較差

4、innoDB特點(diǎn)介紹

(1)支持事務(wù)
(2)行級(jí)鎖定,提高數(shù)據(jù)庫(kù)并發(fā)訪問性能
(3)非常高效的緩存索引和數(shù)據(jù)
(4)支持外鍵約束,5.5版本后支持全文索引
(5)對(duì)硬件資源要求比較高的場(chǎng)合

5、innoDB適用生產(chǎn)場(chǎng)景分析

(1)業(yè)務(wù)需要事務(wù)的支持
(2)行級(jí)鎖定對(duì)高并發(fā)有很好的適應(yīng)能力,但需確保查詢是通過索引來(lái)完成
(3)業(yè)務(wù)數(shù)據(jù)更新較為頻繁的場(chǎng)景,如:論壇,微博等
(4)業(yè)務(wù)數(shù)據(jù)一致性要求較高,如:銀行業(yè)務(wù)
(5)硬件設(shè)備內(nèi)存較大,利用lnnodb較好的緩存能力來(lái)提高內(nèi)存利用率,減少磁盤IO的壓力

6、企業(yè)選擇存儲(chǔ)引擎依據(jù)

(1)需要考慮每個(gè)存儲(chǔ)引擎提供的核心功能及應(yīng)用場(chǎng)景
(2)支持的字段和數(shù)據(jù)類型
(3)鎖定類型:不同的存儲(chǔ)引擎支持不同級(jí)別的鎖定
(4)索引的支持
(5)事務(wù)處理的支持

7、查看存儲(chǔ)引擎

(1)查看MySQL默認(rèn)的存儲(chǔ)引擎

mysql> show engines;  #默認(rèn)存在9款存儲(chǔ)引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
mysql> show variables like '%storage_engine%';
(2)查看表正在使用的存儲(chǔ)引擎
mysql> show table status where name='表名';
mysql> show create table 表名;

8、修改存儲(chǔ)引擎

(1)alter table 修改 (準(zhǔn)對(duì)以創(chuàng)建的表)

mysql> alter table user_info engine=引擎;

(2)修改my.cnf文件,指定默認(rèn)存儲(chǔ)引擎并重新啟動(dòng)(針對(duì)新創(chuàng)建的表,舊表不影響存儲(chǔ)引擎)

[root@localhost ~]# vim /etc/my.cnf
    default-storage-engine=INNODB  
[root@localhost ~]# systemctl restart mysqld

(3)create table創(chuàng)建表時(shí)指定存儲(chǔ)引擎

mysql> create table 表名(字段1) engine=引擎;

(4)臨時(shí)修改存儲(chǔ)引擎

mysql> set default_storage_engine=引擎;

到此這篇關(guān)于mysql 添加索引的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)mysql 添加索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • MySQL會(huì)發(fā)生死鎖的幾種情況及處理方法

    MySQL會(huì)發(fā)生死鎖的幾種情況及處理方法

    數(shù)據(jù)庫(kù)的死鎖是指不同的事務(wù)在獲取資源時(shí)相互等待,導(dǎo)致無(wú)法繼續(xù)執(zhí)行的一種情況,當(dāng)發(fā)生死鎖時(shí),數(shù)據(jù)庫(kù)系統(tǒng)會(huì)自動(dòng)中斷其中一個(gè)事務(wù),以解除死鎖,本文給大家介紹了MySQL什么情況下會(huì)死鎖,發(fā)生了死鎖怎么處理呢,需要的朋友可以參考下
    2023-09-09
  • Mysql插入數(shù)據(jù)方式(insert into 、replace into解析)

    Mysql插入數(shù)據(jù)方式(insert into 、replace into解析)

    這篇文章主要介紹了Mysql插入數(shù)據(jù)方式(insert into 、replace into解析),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 數(shù)據(jù)結(jié)構(gòu)-樹(三):多路搜索樹B樹、B+樹

    數(shù)據(jù)結(jié)構(gòu)-樹(三):多路搜索樹B樹、B+樹

    這篇文章主要介紹了多路搜索樹B樹、B+樹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySql5.5忘記root密碼怎么辦

    MySql5.5忘記root密碼怎么辦

    使用mysql5.5,突然root密碼忘記,怎么也登錄不了,很急人,該怎么解決呢?下面通過本文給大家介紹mysql5.5忘記root密碼的解決辦法,需要的朋友參考下吧
    2016-01-01
  • MySQL之information_schema數(shù)據(jù)庫(kù)詳細(xì)講解

    MySQL之information_schema數(shù)據(jù)庫(kù)詳細(xì)講解

    這篇文章主要介紹了MySQL之information_schema數(shù)據(jù)庫(kù)詳細(xì)講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 打開和關(guān)閉mysql服務(wù)的兩種實(shí)現(xiàn)方法

    打開和關(guān)閉mysql服務(wù)的兩種實(shí)現(xiàn)方法

    這篇文章主要介紹了打開和關(guān)閉mysql服務(wù)的兩種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-07-07
  • mysql 的replace into實(shí)例詳解

    mysql 的replace into實(shí)例詳解

    這篇文章主要介紹了mysql 的replace into實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 深入解析MySQL的窗口函數(shù)

    深入解析MySQL的窗口函數(shù)

    這篇文章主要介紹了深入解析MySQL的窗口函數(shù),窗口可以理解為記錄集合,窗口函數(shù)就是在滿足某種條件的記錄集合上執(zhí)行的特殊函數(shù),即:應(yīng)用在窗口內(nèi)的函數(shù),需要的朋友可以參考下
    2023-07-07
  • mysql的分區(qū)技術(shù)詳細(xì)介紹

    mysql的分區(qū)技術(shù)詳細(xì)介紹

    這篇文章主要介紹了mysql的分區(qū)技術(shù)詳細(xì)介紹,本文講解了分區(qū)技術(shù)概述、分區(qū)的類型及分區(qū)操作等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • MySQL 優(yōu)化設(shè)置步驟

    MySQL 優(yōu)化設(shè)置步驟

    mysql的一些運(yùn)行效率等優(yōu)化設(shè)置,建議擁有服務(wù)器的朋友,可以測(cè)試。
    2009-03-03

最新評(píng)論