原創(chuàng)MySQL的索引與事務(wù)、存儲(chǔ)引擎

索引的概念

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、虛擬主機(jī)、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、洪洞網(wǎng)站維護(hù)、網(wǎng)站推廣。

數(shù)據(jù)庫(kù)中的索引與書(shū)籍中的目錄類(lèi)似

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

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

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

索引的作用

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

索引的分類(lèi)

普通索引

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

主鍵

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

全文索引

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

單列索引與多列索引

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

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

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

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

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

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

創(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;

事務(wù)的概念

事務(wù)是一種機(jī)制,一個(gè)操作序列,包含了一組數(shù)據(jù)庫(kù)操作命令,并且把所有的命令作為一個(gè)整體一起向系統(tǒng)提交或撤銷(xiāo)操作請(qǐng)求,即這一組數(shù)據(jù)庫(kù)命令要么都執(zhí)行,要么都不執(zhí)行;

事務(wù)是一個(gè)不可分割的工作邏輯單元,在數(shù)據(jù)庫(kù)系統(tǒng)上執(zhí)行并發(fā)操作時(shí),事務(wù)是最小的控制單元;

使用于多用戶(hù)同時(shí)操作的數(shù)據(jù)庫(kù)系統(tǒng)的場(chǎng)景,如銀行,保險(xiǎn)公司及證券交易系統(tǒng)等等;

通過(guò)事務(wù)的整體性以保證數(shù)據(jù)的一致性;

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

原子性:事務(wù)是一個(gè)完整的操作,事務(wù)的各元素是不可分的(原子的)
事務(wù)中的所有元素必須作為一個(gè)整體提交或回滾
如果事務(wù)中的任何元素失敗,則整個(gè)事務(wù)將失敗

一致性:當(dāng)事務(wù)完成時(shí),數(shù)據(jù)必須處于一致?tīng)顟B(tài):在事務(wù)開(kāi)始之前,數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)處于一致?tīng)顟B(tài);在正在進(jìn)行的事務(wù)中,數(shù)據(jù)可能處于不一致的狀態(tài);當(dāng)事務(wù)成功完成時(shí),數(shù)據(jù)必須再次回到已知的一致?tīng)顟B(tài)

隔離性:對(duì)數(shù)據(jù)進(jìn)行修改的所有并發(fā)事務(wù)是彼此隔離的,這表明事務(wù)必須是獨(dú)立的,他不應(yīng)以任何方式依賴(lài)于或影響其他事務(wù)
修改數(shù)據(jù)的事務(wù)可以在另一個(gè)使用相同數(shù)據(jù)的事務(wù)開(kāi)始之前訪問(wèn)這些數(shù)據(jù),或者再另一個(gè)使用相同的數(shù)據(jù)的事務(wù)結(jié)束之后訪問(wèn)這些數(shù)據(jù)

持久性:事務(wù)持久性指不管系統(tǒng)是否發(fā)生故障,事務(wù)處理的結(jié)果都是永久的
一旦事務(wù)被提交,事務(wù)的效果會(huì)被永久的保留在數(shù)據(jù)庫(kù)中

事務(wù)處理命令控制事務(wù):

begin:開(kāi)始一個(gè)事務(wù)
commit:提交一個(gè)事務(wù)
rollback:回滾一個(gè)事務(wù)

使用set命令進(jìn)行控制:

set autocommit=0:禁止自動(dòng)提交
set autocommit=1:開(kāi)啟自動(dòng)提交

存儲(chǔ)引擎概念介紹

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

MyISAM的概述

ISAM的特點(diǎn):
ISAM執(zhí)行讀取操作的速度很快
而且不占用大量的內(nèi)存和存儲(chǔ)資源
他不支持事務(wù)處理
不能夠容錯(cuò)

MyISAM的特點(diǎn):

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

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

配置存儲(chǔ)引擎MyISA

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

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

修改存儲(chǔ)引擎

方法1: alter table修改;
alter table table name engine=引擎;
方法2:修改my.cnf,指定默認(rèn)存儲(chǔ)引擎并重啟服務(wù)
default-storage-engine=InnDB
方法3: create table創(chuàng)建表時(shí)指定存儲(chǔ)引擎
create table 表名 (字段) engine= 引擎
方法4: Mysql
convert table format 轉(zhuǎn)化存儲(chǔ)引擎
Mysql convert table_ format -user=root -password=密碼

  • sock=/tmp/mysql.sock - engine =引擎 庫(kù)名 表名

本文標(biāo)題:原創(chuàng)MySQL的索引與事務(wù)、存儲(chǔ)引擎
分享URL:http://bm7419.com/article18/geisgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、網(wǎng)站內(nèi)鏈網(wǎng)站排名、自適應(yīng)網(wǎng)站營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、商城網(wǎng)站

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)