天天看點

MySQL的索引與事務、存儲引擎MyISA和InnoDB(重點理論!!!)索引的概念索引的作用索引的分類事務的操作MyISAM的概述配置存儲引擎MyISAM

索引的概念

資料庫中的索引與書籍中的目錄類似

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

資料庫索引

在資料庫中,索引資料庫程式無須對整個表進行掃描,就可以在其中找到所需資料
資料庫中的索引是某個表中一列或者若幹列值的集合,以及實體辨別這些值的資料頁的邏輯指針清單
           

索引的作用

設定了合适的索引之後,資料庫利用各種快速的定位技術,能夠大大加快查詢速率;
特别是當表很大時,或者查詢涉及到多個表時,使用索引可使查詢加快成千倍;
可以降低資料庫的IO成本,并且索引還可以降低資料庫的排序成本;
通過建立唯一性索引保證資料表資料的唯一性;
可以加快表與表之間的連接配接;
在使用分組和排序時,可大大減少分組和排序時間;
           

索引的分類

普通索引

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

唯一性索引

這種索引和前面的"普通索引"基本相同,但有一個差別:索引列的所有值都隻能出現一次,即必須唯一
           

主鍵

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

全文索引

全文索引的類型是FULLTEXT,可以在VARCHAR或者TEXT類型的列上建立
           

單列索引與多列索引

索引可以是單列上建立的索引,也可以是在多列上建立的索引
           

建立索引的原則依據

表的主鍵,外鍵必須有索引;
資料量超過300行的表應該有索引;
經常與其他表進行連接配接的表,在連接配接字段上應該建立索引;
唯一性太差的字段不适合建立索引;
更新太頻繁的字段不适合建立索引;
經常出現在where子句中的字段,特别是大表的字段,應該建立索引;
索引應該建在選擇性高的字段上;
索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引;
           

建立索引的方法

根據企業需求選擇了合适的索引之後,可使用CREATE INDEX建立索引
           
CREATE INDEX加上各個索引關鍵字便可建立各個類型的索引
           

建立普通索引

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

普通索引例子

CREATE INDEX salary_index ON IT_salary(薪資);
           

建立唯一性索引

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

建立唯一性索引例子

CREATE UNIQUE INDEX salary_unique_index ON IT_salary(姓名);
           

建立主鍵索引

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;
           

事務的概念

 事務是一種機制,一個操作序列,包含了一組資料庫操作指令,并且把所有的指令作為一個整體一起向系統送出或撤銷操作請求,即這一組資料庫指令要麼都執行,要麼都不執行;
     
     事務是一個不可分割的工作邏輯單元,在資料庫系統上執行并發操作時,事務是最小的控制單元;
     
     使用于多使用者同時操作的資料庫系統的場景,如銀行,保險公司及證券交易系統等等;
     
     通過事務的整體性以保證資料的一緻性;
           

事務的ACID特點

原子性:事務是一個完整的操作,事務的各元素是不可分的(原子的)
    事務中的所有元素必須作為一個整體送出或復原
    如果事務中的任何元素失敗,則整個事務将失敗
    
    一緻性:當事務完成時,資料必須處于一緻狀态:在事務開始之前,資料庫中存儲的資料處于一緻狀态;在正在進行的事務中,資料可能處于不一緻的狀态;當事務成功完成時,資料必須再次回到已知的一緻狀态
    
    
   	隔離性:對資料進行修改的所有并發事務是彼此隔離的,這表明事務必須是獨立的,他不應以任何方式依賴于或影響其他事務
    修改資料的事務可以在另一個使用相同資料的事務開始之前通路這些資料,或者再另一個使用相同的資料的事務結束之後通路這些資料
    

    持久性:事務持久性指不管系統是否發生故障,事務處理的結果都是永久的
    一旦事務被送出,事務的效果會被永久的保留在資料庫中
           

事務的操作

預設情況下的MySQL的事務是自動送出的,當SQL語句送出時事務便自動送出
           

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

事務處理指令控制
使用set設定事務出來方式
           

事務處理指令控制事務:

begin:開始一個事務
commit:送出一個事務
rollback:復原一個事務
           

使用set指令進行控制:

set autocommit=0:禁止自動送出
set autocommit=1:開啟自動送出
           

存儲引擎概念介紹

 MySQL中的資料用各種不同的技術存儲在檔案中,每一種技術都使用不同的存儲機制,索引技巧,鎖定水準并最終提供不同的功能和能力,這些不同的技術以及配套的功能在MySQL中稱為存儲引擎
     存儲引擎就是MySQL将資料存儲在檔案系統中的存儲方式或存儲格式
     目前MySQL常用的兩種存儲引擎:
      MyISQM
      InnoDB
     MySQL存儲引擎是MySQL資料庫伺服器中的元件,負責為資料庫執行實際的資料I/O操作
     使用特殊存儲引擎的主要優點之一在于,僅需提供特殊應用所需的特性,資料庫中的系統開銷較小,具有更有效和更高的資料庫性能
     MySQL系統中,存儲引擎處于檔案系統之上,在資料儲存到資料檔案之前會傳輸存儲引擎,之後按照各個存儲引擎的存儲格式進行存儲
           
MySQL的索引與事務、存儲引擎MyISA和InnoDB(重點理論!!!)索引的概念索引的作用索引的分類事務的操作MyISAM的概述配置存儲引擎MyISAM

MyISAM的概述

ISAM的特點:

ISAM執行讀取操作的速度很快
而且不占用大量的記憶體和存儲資源
他不支援事務處理
不能夠容錯
           

MyISAM的特點:

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

MyISAM适用的生産場景

公司業務不需要事務的支援
一般單方面讀取資料比較多的業務,或單方面寫入資料比較多的業務
MyISAM存儲引擎資料讀寫都比較頻繁場景不适合
使用讀寫并發通路相對較低的業務
資料修改相對較少的業務
對資料業務一緻性要求不是非常高的業務
伺服器硬體資源相對比較差
           

InnoDB特點介紹

支援事務:支援4個事務隔離級别
行級鎖定,但是全表掃描仍然會是表級鎖定
讀寫阻塞與事務隔離級别相關
具有非常高效的緩存特性:能緩存索引,也能緩存資料
表與主鍵以簇的方式存儲
支援分區、表空間,類似oracle資料庫
支援外鍵限制,5.5以前不支援全文索引,5.5版本以後支援全文索引
對硬體資源要求還是比較高的場合
           

InnoDB适用生産場景

業務需要事務的支援
行級鎖定對高并發有很好的适應能力,但需確定查詢是通過索引來完成
業務資料更新較為頻繁的場景,如:論壇,微網誌等
業務資料一緻性要求較高,例如:銀行業務
硬體裝置記憶體較大,利用Innodb較好的緩存能力來提高記憶體使用率,減少磁盤I0的壓力
           

企業選擇存儲引擎依據

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

支援的字段和資料類型

所有引擎都支援通用的資料類型
但不是所有的引擎都支援其他的字段類型,如二進制對象
           

鎖定類型:不同的存儲引擎支援不同級别的鎖定

表鎖定
行鎖定
           

支援的索引

建立索引在搜尋和恢複資料庫中的資料的時候能夠顯著提高性能
不同的存儲引擎提供不同的制作索引的技術
有些存儲引擎根本不支援索引
           

支援的事務處理

事務處理功能通過提供在向表中更新和插入資訊期間的可靠性
課根據企業業務是否支援事務選項選擇存儲引擎
           

配置存儲引擎MyISAM

在企業中選擇好合适的存儲引擎之後,就可以進行修改了

修改步驟

檢視資料庫可配置的存儲引擎
檢視表正在使用的存儲引擎
配置存儲引擎為所選擇的類型
           

使用show engines檢視系統支援的存儲引擎

方法1:

方法2:

修改存儲引擎

方法1: alter table修改;
alter table table_ name engine=引擎;
方法2:修改my.cnf,指定預設存儲引擎并重新開機服務
default-storage-engine=InnDB
方法3: create table建立表時指定存儲引擎
create table   表名   (字段) engine=   引擎
方法4: Mysql_ convert_ table_ format 轉化存儲引擎
Mysql_ convert_ table_ format -user=root -password=密碼
- sock=/tmp/mysql.sock - engine =引擎 庫名 表名
           

繼續閱讀