柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 mysql (三)
柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 mysql (三)
mysql索引
索引:
概念:索引是一個(gè)排序的列表,在列表中存儲(chǔ)索引的值及索引值對(duì)應(yīng)數(shù)據(jù)所在的物理行
索引值和數(shù)據(jù)是映射關(guān)系
作用
使用索引之后,不需要掃描全表來定位某行數(shù)據(jù)。加快數(shù)據(jù)庫的查詢速度
索引可以是表中的一列,也可以是多列
1.設(shè)置索引之后,數(shù)據(jù)庫可以利用索引快速定位,大大提高查詢速度。創(chuàng)建索引的主要原因
2.表的數(shù)據(jù)很大,或多表查詢時(shí) 索引可以大大提高查詢速度
3.建立索引不僅能夠提高查詢速度,在恢復(fù)數(shù)據(jù)庫的數(shù)據(jù)時(shí)也能提高性能
4.可以加快表與表之間連接查詢的速度
副作用:
1.創(chuàng)建的索引額外占用磁盤空間。innodb存儲(chǔ)引擎表數(shù)據(jù)文件和索引文件在一塊。相對(duì)來說占用空間小
2.更新一個(gè)包含索引的表,比沒有索引的表花費(fèi)更多的時(shí)間
表需要更新,索引也要更新,所以速度慢
理想的做法:在經(jīng)常s被搜索條件的列上創(chuàng)建索引
創(chuàng)建索引的原則 依據(jù):
1.表的主鍵和外鍵必須有索引,主鍵唯一 、 外鍵關(guān)聯(lián)主表,這樣創(chuàng)建索引可以快速定位
2.一張表有超過300行的數(shù)據(jù),應(yīng)該要?jiǎng)?chuàng)建索引
3.經(jīng)常與其他表進(jìn)行連接的表,在連接字段上應(yīng)該創(chuàng)建索引
4.更新太頻繁的字段不適合創(chuàng)建索引
5.經(jīng)常作為where語句的條件列應(yīng)該創(chuàng)建索引
6.經(jīng)常使用groupby 和order by的字段要建立索引
7.選擇一個(gè)性能高的字段作為索引(字段不同的值比較多的適合)
8.索引要建立在小字段上(字符串長(zhǎng)度短),長(zhǎng)文本,超長(zhǎng)字段不適合建立索引
索引的類型:
b-tree索引 或 b-樹 索引 絕大多數(shù)數(shù)據(jù)都使用b-樹索引
哈希索引:散列 索引對(duì)應(yīng)的哈希值的方法獲取表的記錄 速度慢 用的少
創(chuàng)建索引 create table member ( id int(10), name varchar(10), remark text, #text是一種數(shù)據(jù)類型,和char varchar性質(zhì)相同,都是字符串,不需要長(zhǎng)度參數(shù),可以作為大文本的列。可存儲(chǔ)65535個(gè)字符 INDEX name_index (name) #創(chuàng)建表時(shí)創(chuàng)建索引 );
查看索引 SHOW INDEX FROM member; 創(chuàng)建、添加索引 ALTER TABLE member ADD INDEX id_index(id); CREATE INDEX id_index ON member(id);
EXPLAIN SELECT * FROM member WHERE id =1; #explain查詢當(dāng)前語句使用索引的情況
#刪除索引 DROP INDEX phone_index on member; ALTER TABLE member DROP INDEX id_index;
主鍵索引:設(shè)置了主鍵,會(huì)自動(dòng)作為索引
唯一索引:唯一約束也自動(dòng)添加為索引
全文索引:適用于模糊查詢,檢索大文本使用
CREATE FULLTEXT INDEX remark_index ON member(remark);
事務(wù)
mysql的事務(wù),事務(wù)是一個(gè)機(jī)制,一個(gè)操作序列,一組或一條數(shù)據(jù)庫的操作命令
把所有的命令作為一個(gè)整體向系統(tǒng)提交或撤銷的操作。都成功,或都失敗
數(shù)據(jù)的一致性非常重要。
事務(wù)是一個(gè)不可分割的工作邏輯單元,在數(shù)據(jù)庫上執(zhí)行并發(fā)操作時(shí),事務(wù)是最小的控制單元
數(shù)據(jù)庫通過事務(wù)的控制和事務(wù)的整體性保證數(shù)據(jù)的一致性。
事務(wù)的特點(diǎn):ACID 在數(shù)據(jù)庫的管理系統(tǒng)中,事務(wù)的特性有A C I D四種
A:ATOMICITY 原子性:事務(wù)的最小控制單位,不可分割。要么都成功,要么都失敗
C:consistency 一致性:事務(wù)開始之前,和結(jié)束之后,數(shù)據(jù)庫的完整性沒有被破壞。
在事務(wù)進(jìn)行的時(shí)候,數(shù)據(jù)可以處于不一致的狀態(tài),但一旦結(jié)束,數(shù)據(jù)必須回到一致。避免臟讀
I:isolation 隔離性:并發(fā)環(huán)境中,不同的事務(wù)同時(shí)操作相同的數(shù)據(jù)時(shí),每個(gè)事務(wù)都有自己完整的數(shù)據(jù)空間
對(duì)數(shù)據(jù)的修改所發(fā)生的并發(fā)事務(wù)是隔離的,每個(gè)事務(wù)之間都是獨(dú)立的。
一個(gè)用戶的事務(wù)不被其他事務(wù)所干擾。
數(shù)據(jù)庫的隔離性:
1.未提交讀 read uncommitted =RU
允許臟讀,一個(gè)事務(wù)可以看到其他事務(wù)未提交的修改
2.提交讀:read committed =RC
一個(gè)事務(wù)只能看到其他事務(wù)已經(jīng)提交的修改,未提交的修改不可見。防止臟讀
oracle 、sql server 提交讀
3.可重復(fù)讀 repeatable read =RR,一個(gè)事務(wù)在執(zhí)行中,執(zhí)行兩次相同的select語句,得到的結(jié)果都是相同的
mysql的默認(rèn)隔離選項(xiàng),防止臟讀和不可重復(fù)讀
4.串行讀,相當(dāng)于鎖表,完全串行化的讀,一個(gè)事務(wù)在使用,其他事務(wù)的讀寫都阻塞(同時(shí)只能由一個(gè)人操作)
D:durability持久性: 一旦提交寫入了數(shù)據(jù)庫,數(shù)據(jù)不可更改
臟讀:一個(gè)事務(wù)可以看到其他事務(wù)未提交的修改
不可重復(fù)讀 oracle :在一個(gè)事務(wù)內(nèi)多次讀同一數(shù)據(jù),一個(gè)事務(wù)沒有結(jié)束,另外一個(gè)事物也訪問該數(shù)據(jù)
一個(gè)事務(wù)連續(xù)兩次查詢,發(fā)現(xiàn)結(jié)果不一致,因?yàn)榱硗庖粋€(gè)事務(wù)在對(duì)這個(gè)數(shù)據(jù)進(jìn)行修改。即兩次看到的數(shù)據(jù)不能一致
不可重復(fù)讀是正常的情況
幻讀:一個(gè)事務(wù)對(duì)一個(gè)表的數(shù)據(jù)進(jìn)行了修改,另一個(gè)表也修改了表中數(shù)據(jù),前一個(gè)事務(wù)會(huì)發(fā)現(xiàn)改的結(jié)果不正確
不可更新:兩邊同時(shí)對(duì)數(shù)據(jù)進(jìn)行修改,一方先提交,一方后提交,后提交會(huì)覆蓋先提交
事務(wù)的控制語句:
開啟一個(gè)事務(wù) begin; start transaction;
提交事務(wù) commit;
rollback:回滾
savepoint +名稱 :設(shè)置回滾點(diǎn)
rollback to savepoint 名稱 :回滾到指定的點(diǎn)
多個(gè)回滾點(diǎn)只能選一個(gè),提交事務(wù)后所有回滾點(diǎn)都失效
柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 mysql (三)
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。