原創 MySQL的索引與事務、存儲引擎

索引的概念mysql

數據庫中的索引與書籍中的目錄相似sql

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

數據庫索引緩存

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

索引的做用併發

設置了合適的索引以後,數據庫利用各類快速的定位技術,可以大大加快查詢速率;
特別是當表很大時,或者查詢涉及到多個表時,使用索引可以使查詢加快成千倍;
能夠下降數據庫的IO成本,而且索引還能夠下降數據庫的排序成本;
經過建立惟一性索引保證數據表數據的惟一性;
能夠加快表與表之間的鏈接;
在使用分組和排序時,可大大減小分組和排序時間;ide

索引的分類性能

普通索引指針

這種索引和前面的"普通索引"基本相同,但有一個區別:索引列的全部值都只能出現一次,即必須惟一code

主鍵

主鍵是一種惟一性索引,但它必須制定爲"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;

事務的概念

事務是一種機制,一個操做序列,包含了一組數據庫操做命令,而且把全部的命令做爲一個總體一塊兒向系統提交或撤銷操做請求,即這一組數據庫命令要麼都執行,要麼都不執行;

 事務是一個不可分割的工做邏輯單元,在數據庫系統上執行併發操做時,事務是最小的控制單元;

 使用於多用戶同時操做的數據庫系統的場景,如銀行,保險公司及證券交易系統等等;

 經過事務的總體性以保證數據的一致性;

事務的ACID特色

原子性:事務是一個完整的操做,事務的各元素是不可分的(原子的)
事務中的全部元素必須做爲一個總體提交或回滾
若是事務中的任何元素失敗,則整個事務將失敗

一致性:當事務完成時,數據必須處於一致狀態:在事務開始以前,數據庫中存儲的數據處於一致狀態;在正在進行的事務中,數據可能處於不一致的狀態;當事務成功完成時,數據必須再次回到已知的一致狀態

隔離性:對數據進行修改的全部併發事務是彼此隔離的,這代表事務必須是獨立的,他不該以任何方式依賴於或影響其餘事務
修改數據的事務能夠在另外一個使用相同數據的事務開始以前訪問這些數據,或者再另外一個使用相同的數據的事務結束以後訪問這些數據

持久性:事務持久性指無論系統是否發生故障,事務處理的結果都是永久的
一旦事務被提交,事務的效果會被永久的保留在數據庫中

事務處理命令控制事務:

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

使用set命令進行控制:

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

存儲引擎概念介紹

 MySQL中的數據用各類不一樣的技術存儲在文件中,每一種技術都使用不一樣的存儲機制,索引技巧,鎖定水平並最終提供不一樣的功能和能力,這些不一樣的技術以及配套的功能在MySQL中稱爲存儲引擎
 存儲引擎就是MySQL將數據存儲在文件系統中的存儲方式或存儲格式
 目前MySQL經常使用的兩種存儲引擎:
  MyISQM
  InnoDB
 MySQL存儲引擎是MySQL數據庫服務器中的組件,負責爲數據庫執行實際的數據I/O操做
 使用特殊存儲引擎的主要優勢之一在於,僅需提供特殊應用所需的特性,數據庫中的系統開銷較小,具備更有效和更高的數據庫性能
 MySQL系統中,存儲引擎處於文件系統之上,在數據保存到數據文件以前會傳輸存儲引擎,以後按照各個存儲引擎的存儲格式進行存儲

MyISAM的概述

ISAM的特色:
ISAM執行讀取操做的速度很快
並且不佔用大量的內存和存儲資源
他不支持事務處理
不可以容錯

MyISAM的特色:

一、不支持事務
二、表級鎖定形式,數據在更新時鎖定整個表
三、數據庫在讀寫過程當中相互阻塞
會在數據寫入的過程阻塞用戶數據的讀取
也會在數據讀取的過程當中阻塞用戶的數據寫入
四、可經過key_buffer_size來設置緩存索引,提升訪問性能,減小磁盤IO的壓力
但緩存只會緩存索引文件,不會緩存數據
五、採用MyISAM存儲引擎數據單獨寫入或讀取,速度過程較快且佔用資源相對少
六、MyISAM存儲引擎它不支持外鍵約束,只支持全文索引
七、每一個MyISAM在磁盤.上存儲成三個文件,每- -個文件的名字以表的名字開始,擴展名指出文件類型
八、MyISAM在磁盤.上存儲的文件
.frm文件存儲表定義
數據文件的擴展名爲.MYD (MYData)
索引文件的擴展名是.MYI (MYIndex)

MyISAM適用的生產場景
公司業務不須要事務的支持
通常單方面讀取數據比較多的業務,或單方面寫入數據比較多的業務
MyISAM存儲引擎數據讀寫都比較頻繁場景不適合
使用讀寫併發訪問相對較低的業務
數據修改相對較少的業務
對數據業務一致性要求不是很是高的業務
服務器硬件資源相對比較差

配置存儲引擎MyISA

使用show engines查看系統支持的存儲引擎

方法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建立表時指定存儲引擎
create table 表名 (字段) engine= 引擎
方法4: Mysql
convert table format 轉化存儲引擎
Mysql convert table_ format -user=root -password=密碼

  • sock=/tmp/mysql.sock - engine =引擎 庫名 表名
相關文章
相關標籤/搜索