MySQL——索引與事務,存儲引擎MyLSAM和InnoDB(理論篇)

索引的概念

數(shù)據(jù)庫中的索引與書籍中的目錄類似

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、龍井網(wǎng)站維護、網(wǎng)站推廣。

在一本書中,無須閱讀整本書,利用目錄就可以快速查找所需信息
書中的目錄是一個詞語列表,其中注明了包含各個詞的頁碼

數(shù)據(jù)庫索引

在數(shù)據(jù)庫中,索引數(shù)據(jù)庫程序無須對整個表進行掃描,就可以在其中找到所需數(shù)據(jù)
數(shù)據(jù)庫中的索引是某個表中一列或者若干列值的集合,以及物理標識這些值的數(shù)據(jù)頁的邏輯指針清單

索引的作用

設(shè)置了合適的索引之后,數(shù)據(jù)庫利用各種快速的定位技術(shù),能夠大大加快查詢速率;
特別是當表很大時,或者查詢涉及到多個表時,使用索引可使查詢加快成千倍;
可以降低數(shù)據(jù)庫的IO成本,并且索引還可以降低數(shù)據(jù)庫的排序成本;
通過創(chuàng)建唯一性索引保證數(shù)據(jù)表數(shù)據(jù)的唯一性;
可以加快表與表之間的連接;
在使用分組和排序時,可大大減少分組和排序時間;

索引的分類

普通索引

這是最基本的索引類型,而且它沒有唯一性之類的限制

唯一性索引

這種索引和前面的"普通索引"基本相同,但有一個區(qū)別:索引列的所有值都只能出現(xiàn)一次,即必須唯一

主鍵

主鍵是一種唯一性索引,但它必須制定為"PRIMARY KEY"

全文索引

全文索引的類型是FULLTEXT,可以在VARCHAR或者TEXT類型的列上創(chuàng)建

單列索引與多列索引

索引可以是單列上創(chuàng)建的索引,也可以是在多列上創(chuàng)建的索引

創(chuàng)建索引的原則依據(jù)

表的主鍵,外鍵必須有索引;
數(shù)據(jù)量超過300行的表應該有索引;
經(jīng)常與其他表進行連接的表,在連接字段上應該建立索引;
唯一性太差的字段不適合建立索引;
更新太頻繁的字段不適合創(chuàng)建索引;
經(jīng)常出現(xiàn)在where子句中的字段,特別是大表的字段,應該建立索引;
索引應該建在選擇性高的字段上;
索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;

創(chuàng)建索引的方法

根據(jù)企業(yè)需求選擇了合適的索引之后,可使用CREATE INDEX創(chuàng)建索引

CREATE INDEX加上各個索引關(guān)鍵字便可創(chuàng)建各個類型的索引

創(chuàng)建普通索引

CREATE INDEX <索引的名字> ON tablename (列的列表);

創(chuàng)建普通索引

CREATE INDEX salary_index ON IT_salary(薪資);

創(chuàng)建唯一性索引

CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);

創(chuàng)建唯一性索引例子

CREATE UNIQUE INDEX salary_unique_index ON IT_salary(姓名);

創(chuàng)建主鍵索引

CREATE TABLE tablename ( [...],PRIMARY KEY (列的列表));
ALTER TABLE tablename ADD PRIMARY KEY (列的列表);

主鍵索引例子

ALTER TABLE IT_salary ADD PRIMARY KEY (員工ID);

索引查看

SHOW INDEX FROM tablename;
SHOW KEYS FROM tablename;

查看索引例子

SHOW INDEX FROM IT_salary;
SHOW KEYS FROM IT_salary;

事務的概念

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

事務的ACID特點

原子性:
事務是一個完整的操作,事務的各元素是不可分的(原子的)
事務中的所有元素必須作為一個整體提交或回滾
如果事務中的任何元素失敗,則整個事務將失敗
一致性:
當事務完成時,數(shù)據(jù)必須處于一致狀態(tài):在事務開始之前,數(shù)據(jù)庫中存儲的數(shù)據(jù)處于一致狀態(tài);在正在進行的事務中,數(shù)據(jù)可能處于不一致的狀態(tài);當事務成功完成時,數(shù)據(jù)必須再次回到已知的一致狀態(tài)
隔離性:
對數(shù)據(jù)進行修改的所有并發(fā)事務是彼此隔離的,這表明事務必須是獨立的,他不應以任何方式依賴于或影響其他事務
修改數(shù)據(jù)的事務可以在另一個使用相同數(shù)據(jù)的事務開始之前訪問這些數(shù)據(jù),或者再另一個使用相同的數(shù)據(jù)的事務結(jié)束之后訪問這些數(shù)據(jù)
持久性:
事務持久性指不管系統(tǒng)是否發(fā)生故障,事務處理的結(jié)果都是永久的
一旦事務被提交,事務的效果會被永久的保留在數(shù)據(jù)庫中

事務的操作

默認情況下的MySQL的事務是自動提交的,當SQL語句提交時事務便自動提交

手動對事務進行控制的方法:

事務處理命令控制
使用set設(shè)置事務出來方式

事務處理命令控制事務:

begin:開始一個事務
commit:提交一個事務
rollback:回滾一個事務

使用set命令進行控制:

set autocommit=0:禁止自動提交
set autocommit=1:開啟自動提交

存儲引擎概念介紹

 MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件中,每一種技術(shù)都使用不同的存儲機制,索引技巧,鎖定水平并最終提供不同的功能和能力,這些不同的技術(shù)以及配套的功能在MySQL中稱為存儲引擎
 存儲引擎就是MySQL將數(shù)據(jù)存儲在文件系統(tǒng)中的存儲方式或存儲格式
 目前MySQL常用的兩種存儲引擎:
  MyISQM
  InnoDB
 MySQL存儲引擎是MySQL數(shù)據(jù)庫服務器中的組件,負責為數(shù)據(jù)庫執(zhí)行實際的數(shù)據(jù)I/O操作
 使用特殊存儲引擎的主要優(yōu)點之一在于,僅需提供特殊應用所需的特性,數(shù)據(jù)庫中的系統(tǒng)開銷較小,具有更有效和更高的數(shù)據(jù)庫性能
 MySQL系統(tǒng)中,存儲引擎處于文件系統(tǒng)之上,在數(shù)據(jù)保存到數(shù)據(jù)文件之前會傳輸存儲引擎,之后按照各個存儲引擎的存儲格式進行存儲

MySQL——索引與事務,存儲引擎MyLSAM和InnoDB(理論篇)

MyISQM的介紹

ISAM的特點:

ISAM執(zhí)行讀取操作的速度很快
而且不占用大量的內(nèi)存和存儲資源
他不支持事務處理
不能夠容錯

MyISAM的特點:

1、不支持事務
2、表級鎖定形式,數(shù)據(jù)在更新時鎖定整個表
3、數(shù)據(jù)庫在讀寫過程中相互阻塞
●會在數(shù)據(jù)寫入的過程阻塞用戶數(shù)據(jù)的讀取
●也會在數(shù)據(jù)讀取的過程中阻塞用戶的數(shù)據(jù)寫入
4、可通過key_buffer_size來設(shè)置緩存索引,提高訪問性能,減少磁盤IO的壓力
●但緩存只會緩存索引文件,不會緩存數(shù)據(jù)
5、采用MyISAM存儲引擎數(shù)據(jù)單獨寫入或讀取,速度過程較快且占用資源相對少
6、MyISAM存儲引擎它不支持外鍵約束,只支持全文索引
7、每個MyISAM在磁盤.上存儲成三個文件,每- -個文件的名字以表的名字開始,擴展名指出文件類型
8、MyISAM在磁盤.上存儲的文件
●.frm文件存儲表定義
●數(shù)據(jù)文件的擴展名為.MYD (MYData)
●索引文件的擴展名是.MYI (MYIndex)

MyISAM適用的生產(chǎn)場景舉例

公司業(yè)務不需要事務的支持
一般單方面讀取數(shù)據(jù)比較多的業(yè)務,或單方面寫入數(shù)據(jù)比較多的業(yè)務
MyISAM存儲引擎數(shù)據(jù)讀寫都比較頻繁場景不適合
使用讀寫并發(fā)訪問相對較低的業(yè)務
數(shù)據(jù)修改相對較少的業(yè)務
對數(shù)據(jù)業(yè)務一致性要求不是非常高的業(yè)務
服務器硬件資源相對比較差

InnoDB特點介紹

支持事務:支持4個事務隔離級別
行級鎖定,但是全表掃描仍然會是表級鎖定
讀寫阻塞與事務隔離級別相關(guān)
具有非常高效的緩存特性:能緩存索引,也能緩存數(shù)據(jù)
表與主鍵以簇的方式存儲
支持分區(qū)、表空間,類似oracle數(shù)據(jù)庫
支持外鍵約束,5.5以前不支持全文索引,5.5版本以后支持全文索引
對硬件資源要求還是比較高的場合

InnoDB適用生產(chǎn)場景分析

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

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

需要考慮每個存儲引擎提供了那些不同的核心功能及應運場景

支持的字段和數(shù)據(jù)類型

所有引擎都支持通用的數(shù)據(jù)類型
但不是所有的引擎都支持其他的字段類型,如二進制對象

鎖定類型:不同的存儲引擎支持不同級別的鎖定

表鎖定
行鎖定

索引的支持

建立索引在搜索和恢復數(shù)據(jù)庫中的數(shù)據(jù)的時候能夠顯著提高性能
不同的存儲引擎提供不同的制作索引的技術(shù)
有些存儲引擎根本不支持索引

事務處理的支持

事務處理功能通過提供在向表中更新和插入信息期間的可靠性
課根據(jù)企業(yè)業(yè)務是否支持事務選項選擇存儲引擎

配置存儲引擎

在企業(yè)中選擇好合適的存儲引擎之后,就可以進行修改了

修改步驟

查看數(shù)據(jù)庫可配置的存儲引擎
查看表正在使用的存儲引擎
配置存儲引擎為所選擇的類型

使用show engines查看系統(tǒng)支持的存儲引擎

方法1:
show table status from  庫名  where  name='表名;
方法2:
show create table    表名;

修改存儲引擎

方法1: alter table修改;
alter table table_ name engine=引擎;
方法2:修改my.cnf,指定默認存儲引擎并重啟服務
default-storage-engine=InnDB
方法3: create table創(chuàng)建表時指定存儲引擎
create table   表名   (字段) engine=   引擎
方法4: Mysql_ convert_ table_ format 轉(zhuǎn)化存儲引擎
Mysql_ convert_ table_ format -user=root -password=密碼
- sock=/tmp/mysql.sock - engine =引擎 庫名 表名

謝謝閱讀!

網(wǎng)站欄目:MySQL——索引與事務,存儲引擎MyLSAM和InnoDB(理論篇)
轉(zhuǎn)載源于:http://muchs.cn/article34/iehise.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、虛擬主機、商城網(wǎng)站、定制網(wǎng)站網(wǎng)站排名、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名