真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql怎么選擇引擎 mysql 引擎選擇

如何選擇合適的MySQL存儲(chǔ)引擎文檔

大部分情況下,InnoDB都是正確的選擇,可以簡(jiǎn)單地歸納為一句話“除非需要用到某些InnoDB不具備的特性,并且沒(méi)有其他辦法可以替代,否則都應(yīng)該優(yōu)先選擇InnoDB引擎”。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),鄂爾多斯企業(yè)網(wǎng)站建設(shè),鄂爾多斯品牌網(wǎng)站建設(shè),網(wǎng)站定制,鄂爾多斯網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,鄂爾多斯網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

除非萬(wàn)不得已,否則建議不要混合使用多種存儲(chǔ)引擎,否則可能帶來(lái)一系列負(fù)責(zé)的問(wèn)題,以及一些潛在的bug和邊界問(wèn)題。

如果應(yīng)用需要不同的存儲(chǔ)引擎,請(qǐng)先考慮以下幾個(gè)因素:

事務(wù):

如果應(yīng)用需要事務(wù)支持,那么InnoDB(或者XtraDB)是目前最穩(wěn)定并且經(jīng)過(guò)驗(yàn)證的選擇。

備份:

如果可以定期地關(guān)閉服務(wù)器來(lái)執(zhí)行備份,那么備份的因素可以忽略。反之,如果需要在線熱備份,那么選擇InnoDB就是基本的要求。

崩潰恢復(fù)

MyISAM崩潰后發(fā)生損壞的概率比InnoDB要高很多,而且恢復(fù)速度也要慢。

特有的特性

如果一個(gè)存儲(chǔ)引擎擁有一些關(guān)鍵的特性,同時(shí)卻又缺乏一些必要的特性,那么有時(shí)候不得不做折中的考慮,或者在架構(gòu)設(shè)計(jì)上做一些取舍。

有些查詢(xún)SQL在不同的引擎上表現(xiàn)不同。比較典型的是:

SELECT COUNT(*) FROM table;

對(duì)于MyISAM確實(shí)會(huì)很快,但其他的可能都不行。

MySQL數(shù)據(jù)庫(kù)存儲(chǔ)引擎詳解

存儲(chǔ)引擎是什么?

MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件(或者內(nèi)存)中 這些技術(shù)中的每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制 索引技巧 鎖定水平并且最終提供廣泛的不同的功能和能力 通過(guò)選擇不同的技術(shù) 你能夠獲得額外的速度或者功能 從而改善你的應(yīng)用的整體功能

例如 如果你在研究大量的臨時(shí)數(shù)據(jù) 你也許需要使用內(nèi)存存儲(chǔ)引擎 內(nèi)存存儲(chǔ)引擎能夠在內(nèi)存中存儲(chǔ)所有的表格數(shù)據(jù) 又或者 你也許需要一個(gè)支持事務(wù)處理的數(shù)據(jù)庫(kù)(以確保事務(wù)處理不成功時(shí)數(shù)據(jù)的回退能力)

這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱(chēng)作存儲(chǔ)引擎(也稱(chēng)作表類(lèi)型) MySQL默認(rèn)配置了許多不同的存儲(chǔ)引擎 可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用 你可以選擇適用于服務(wù)器 數(shù)據(jù)庫(kù)和表格的存儲(chǔ)引擎 以便在選擇如何存儲(chǔ)你的信息 如何檢索這些信息以及你需要你的數(shù)據(jù)結(jié)合什么性能和功能的時(shí)候?yàn)槟闾峁┳畲蟮撵`活性

選擇如何存儲(chǔ)和檢索你的數(shù)據(jù)的這種靈活性是MySQL為什么如此受歡迎的主要原因 其它數(shù)據(jù)庫(kù)系統(tǒng)(包括大多數(shù)商業(yè)選擇)僅支持一種類(lèi)型的數(shù)據(jù)存儲(chǔ) 遺憾的是 其它類(lèi)型的數(shù)據(jù)庫(kù)解決方案采取的 一個(gè)尺碼滿足一切需求 的方式意味著你要么就犧牲一些性能 要么你就用幾個(gè)小時(shí)甚至幾天的時(shí)間詳細(xì)調(diào)整你的數(shù)據(jù)庫(kù) 使用MySQL 我們僅需要修改我們使用的存儲(chǔ)引擎就可以了

在這篇文章中 我們不準(zhǔn)備集中討論不同的存儲(chǔ)引擎的技術(shù)方面的問(wèn)題(盡管我們不可避免地要研究這些因素的某些方面) 相反 我們將集中介紹這些不同的引擎分別最適應(yīng)哪種需求和如何啟用不同的存儲(chǔ)引擎 為了實(shí)現(xiàn)這個(gè)目的 在介紹每一個(gè)存儲(chǔ)引擎的具體情況之前 我們必須要了解一些基本的問(wèn)題

如何確定有哪些存儲(chǔ)引擎可用

你可以在MySQL(假設(shè)是MySQL服務(wù)器 以上版本)中使用顯示引擎的命令得到一個(gè)可用引擎的列表

mysql?show?engines; ?? + + + + ?? |?Engine?????|?Support?|?Comment????????????????????????????????????????????????????| ?? + + + + ?? |?MyISAM?????|?DEFAULT?|?Default?engine?as?of?MySQL? ?with?great?performance?????| ?? |?HEAP???????|?YES?????|?Alias?for?MEMORY???????????????????????????????????????????| ?? |?MEMORY?????|?YES?????|?Hash?based ?stored?in?memory ?useful?for?temporary?tables??| ?? |?MERGE??????|?YES?????|?Collection?of?identical?MyISAM?tables??????????????????????| ?? |?MRG_MYISAM?|?YES?????|?Alias?for?MERGE????????????????????????????????????????????| ?? |?ISAM???????|?NO??????|?Obsolete?storage?engine ?now?replaced?by?MyISAM????????????| ?? |?MRG_ISAM???|?NO??????|?Obsolete?storage?engine ?now?replaced?by?MERGE?????????????| ?? |?InnoDB?????|?YES?????|?Supports?transactions ?row level?locking ?and?foreign?keys?| ?? |?INNOBASE???|?YES?????|?Alias?for?INNODB???????????????????????????????????????????| ?? |?BDB????????|?NO??????|?Supports?transactions?and?page level?locking???????????????| ?? |?BERKELEYDB?|?NO??????|?Alias?for?BDB??????????????????????????????????????????????| ?? |?NDBCLUSTER?|?NO??????|?Clustered ?fault tolerant ?memory based?tables?????????????| ?? |?NDB????????|?NO??????|?Alias?for?NDBCLUSTER???????????????????????????????????????| ?? |?EXAMPLE????|?NO??????|?Example?storage?engine?????????????????????????????????????| ?? |?ARCHIVE????|?NO??????|?Archive?storage?engine?????????????????????????????????????| ?? |?CSV????????|?NO??????|?CSV?storage?engine?????????????????????????????????????????| ?? + + + + ?? ?rows?in?set?( ?sec)??

這個(gè)表格顯示了可用的數(shù)據(jù)庫(kù)引擎的全部名單以及在當(dāng)前的數(shù)據(jù)庫(kù)服務(wù)器中是否支持這些引擎

對(duì)于MySQL 以前版本 可以使用mysql show variables like have_% (顯示類(lèi)似 have_% 的變量):

mysql?show?variables?like? have_% ;? ?? + + +? ?? |?Variable_name????|?Value????|? ?? + + +? ?? |?have_bdb?????????|?YES??????|? ?? |?have_crypt???????|?YES??????|? ?? |?have_innodb??????|?DISABLED?|? ?? |?have_isam????????|?YES??????|? ?? |?have_raid????????|?YES??????|? ?? |?have_symlink?????|?YES??????|? ?? |?have_openssl?????|?YES??????|? ?? |?have_query_cache?|?YES??????|? ?? + + +? ?? ?rows?in?set?( ?sec)? ??

你可以通過(guò)修改設(shè)置腳本中的選項(xiàng)來(lái)設(shè)置在MySQL安裝軟件中可用的引擎 如果你在使用一個(gè)預(yù)先包裝好的MySQL二進(jìn)制發(fā)布版軟件 那么 這個(gè)軟件就包含了常用的引擎 然而 需要指出的是 如果你要使用某些不常用的引擎 特別是CSV RCHIVE(存檔)和BLACKHOLE(黑洞)引擎 你就需要手工重新編譯MySQL源碼

使用一個(gè)指定的存儲(chǔ)引擎

你可以使用很多方法指定一個(gè)要使用的存儲(chǔ)引擎 最簡(jiǎn)單的方法是 如果你喜歡一種能滿足你的大多數(shù)數(shù)據(jù)庫(kù)需求的存儲(chǔ)引擎 你可以在MySQL設(shè)置文件中設(shè)置一個(gè)默認(rèn)的引擎類(lèi)型(使用storage_engine 選項(xiàng))或者在啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器時(shí)在命令行后面加上 default storage engine或 default table type選項(xiàng)

更靈活的方式是在隨MySQL服務(wù)器發(fā)布同時(shí)提供的MySQL客戶端時(shí)指定使用的存儲(chǔ)引擎 最直接的方式是在創(chuàng)建表時(shí)指定存儲(chǔ)引擎的類(lèi)型 向下面這樣:

CREATE TABLE mytable (id int title char( )) ENGINE = INNODB

你還可以改變現(xiàn)有的表使用的存儲(chǔ)引擎 用以下語(yǔ)句:

ALTER TABLE mytable ENGINE = MyISAM

然而 你在以這種方式修改表格類(lèi)型的時(shí)候需要非常仔細(xì) 因?yàn)閷?duì)不支持同樣的索引 字段類(lèi)型或者表大小的一個(gè)類(lèi)型進(jìn)行修改可能使你丟失數(shù)據(jù) 如果你指定一個(gè)在你的當(dāng)前的數(shù)據(jù)庫(kù)中不存在的一個(gè)存儲(chǔ)引擎 那么就會(huì)創(chuàng)建一個(gè)MyISAM(默認(rèn)的)類(lèi)型的表

各存儲(chǔ)引擎之間的區(qū)別

為了做出選擇哪一個(gè)存儲(chǔ)引擎的決定 我們首先需要考慮每一個(gè)存儲(chǔ)引擎提供了哪些不同的核心功能 這種功能使我們能夠把不同的存儲(chǔ)引擎區(qū)別開(kāi)來(lái) 我們一般把這些核心功能分為四類(lèi):支持的字段和數(shù)據(jù)類(lèi)型 鎖定類(lèi)型 索引和處理 一些引擎具有能過(guò)促使你做出決定的獨(dú)特的功能 我們一會(huì)兒再仔細(xì)研究這些具體問(wèn)題

字段和數(shù)據(jù)類(lèi)型

雖然所有這些引擎都支持通用的數(shù)據(jù)類(lèi)型 例如整型 實(shí)型和字符型等 但是 并不是所有的引擎都支持其它的字段類(lèi)型 特別是BLOG(二進(jìn)制大對(duì)象)或者TEXT文本類(lèi)型 其它引擎也許僅支持有限的字符寬度和數(shù)據(jù)大小

這些局限性可能直接影響到你可以存儲(chǔ)的數(shù)據(jù) 同時(shí)也可能會(huì)對(duì)你實(shí)施的搜索的類(lèi)型或者你對(duì)那些信息創(chuàng)建的索引產(chǎn)生間接的影響 這些區(qū)別能夠影響你的應(yīng)用程序的性能和功能 因?yàn)槟惚仨氁鶕?jù)你要存儲(chǔ)的數(shù)據(jù)類(lèi)型選擇對(duì)需要的存儲(chǔ)引擎的功能做出決策

鎖定

數(shù)據(jù)庫(kù)引擎中的鎖定功能決定了如何管理信息的訪問(wèn)和更新 當(dāng)數(shù)據(jù)庫(kù)中的一個(gè)對(duì)象為信息更新鎖定了 在更新完成之前 其它處理不能修改這個(gè)數(shù)據(jù)(在某些情況下還不允許讀這種數(shù)據(jù))

鎖定不僅影響許多不同的應(yīng)用程序如何更新數(shù)據(jù)庫(kù)中的信息 而且還影響對(duì)那個(gè)數(shù)據(jù)的查詢(xún) 這是因?yàn)椴樵?xún)可能要訪問(wèn)正在被修改或者更新的數(shù)據(jù) 總的來(lái)說(shuō) 這種延遲是很小的 大多數(shù)鎖定機(jī)制主要是為了防止多個(gè)處理更新同一個(gè)數(shù)據(jù) 由于向數(shù)據(jù)中插入信息和更新信息這兩種情況都需要鎖定 你可以想象 多個(gè)應(yīng)用程序使用同一個(gè)數(shù)據(jù)庫(kù)可能會(huì)有很大的影響

不同的存儲(chǔ)引擎在不同的對(duì)象級(jí)別支持鎖定 而且這些級(jí)別將影響可以同時(shí)訪問(wèn)的信息 得到支持的級(jí)別有三種:表鎖定 塊鎖定和行鎖定 支持最多的是表鎖定 這種鎖定是在MyISAM中提供的 在數(shù)據(jù)更新時(shí) 它鎖定了整個(gè)表 這就防止了許多應(yīng)用程序同時(shí)更新一個(gè)具體的表 這對(duì)應(yīng)用很多的多用戶數(shù)據(jù)庫(kù)有很大的影響 因?yàn)樗舆t了更新的過(guò)程

頁(yè)級(jí)鎖定使用Berkeley DB引擎 并且根據(jù)上載的信息頁(yè)( KB)鎖定數(shù)據(jù) 當(dāng)在數(shù)據(jù)庫(kù)的很多地方進(jìn)行更新的時(shí)候 這種鎖定不會(huì)出現(xiàn)什么問(wèn)題 但是 由于增加幾行信息就要鎖定數(shù)據(jù)結(jié)構(gòu)的最后 KB 當(dāng)需要增加大量的行 也別是大量的小型數(shù)據(jù) 就會(huì)帶來(lái)問(wèn)題

行級(jí)鎖定提供了最佳的并行訪問(wèn)功能 一個(gè)表中只有一行數(shù)據(jù)被鎖定 這就意味著很多應(yīng)用程序能夠更新同一個(gè)表中的不同行的數(shù)據(jù) 而不會(huì)引起鎖定的問(wèn)題 只有InnoDB存儲(chǔ)引擎支持行級(jí)鎖定

建立索引

建立索引在搜索和恢復(fù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的時(shí)候能夠顯著提高性能 不同的存儲(chǔ)引擎提供不同的制作索引的技術(shù) 有些技術(shù)也許會(huì)更適合你存儲(chǔ)的數(shù)據(jù)類(lèi)型

有些存儲(chǔ)引擎根本就不支持索引 其原因可能是它們使用基本表索引(如MERGE引擎)或者是因?yàn)閿?shù)據(jù)存儲(chǔ)的方式不允許索引(例如FEDERATED或者BLACKHOLE引擎)

事務(wù)處理

事務(wù)處理功能通過(guò)提供在向表中更新和插入信息期間的可靠性 這種可靠性是通過(guò)如下方法實(shí)現(xiàn)的 它允許你更新表中的數(shù)據(jù) 但僅當(dāng)應(yīng)用的應(yīng)用程序的所有相關(guān)操作完全完成后才接受你對(duì)表的更改 例如 在會(huì)計(jì)處理中每一筆會(huì)計(jì)分錄處理將包括對(duì)借方科目和貸方科目數(shù)據(jù)的更改 你需要要使用事務(wù)處理功能保證對(duì)借方科目和貸方科目的數(shù)據(jù)更改都順利完成 才接受所做的修改 如果任一項(xiàng)操作失敗了 你都可以取消這個(gè)事務(wù)處理 這些修改就不存在了 如果這個(gè)事務(wù)處理過(guò)程完成了 我們可以通過(guò)允許這個(gè)修改來(lái)確認(rèn)這個(gè)操作

lishixinzhi/Article/program/MySQL/201311/29301

用mysql數(shù)據(jù)庫(kù),怎么選擇引擎?

1、使用show語(yǔ)句找出在服務(wù)器上當(dāng)前存在什么數(shù)據(jù)庫(kù):

mysql

show

databases;

+----------+

|

database

|

+----------+

|

mysql

|

|

test

|

+----------+

3

rows

in

set

(0.00

sec)

2、創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)abccs

mysql

create

database

abccs;

注意不同操作系統(tǒng)對(duì)大小寫(xiě)的敏感。

3、選擇你所創(chuàng)建的數(shù)據(jù)庫(kù)

mysql

use

abccs

database

changed

此時(shí)你已經(jīng)進(jìn)入你剛才所建立的數(shù)據(jù)庫(kù)abccs.

4、

創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表

首先看現(xiàn)在你的數(shù)據(jù)庫(kù)中存在什么表:

mysql

show

tables;

empty

set

(0.00

sec)

說(shuō)明剛才建立的數(shù)據(jù)庫(kù)中還沒(méi)有數(shù)據(jù)庫(kù)表。下面來(lái)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)表mytable:

我們要建立一個(gè)你公司員工的生日表,表的內(nèi)容包含員工姓名、性別、出生日期、出生城市。

mysql

create

table

mytable

(name

varchar(20),

sex

char(1),

-

birth

date,

birthaddr

varchar(20));

query

ok,

rows

affected

(0.00

sec)

由于name、birthadd的列值是變化的,因此選擇varchar,其長(zhǎng)度不一定是20??梢赃x擇從1到255的任何長(zhǎng)度,如果以后需要改變它的字長(zhǎng),可以使用alter

table語(yǔ)句。);性別只需一個(gè)字符就可以表示:"m"或"f",因此選用char(1);birth列則使用date數(shù)據(jù)類(lèi)型。

創(chuàng)建了一個(gè)表后,我們可以看看剛才做的結(jié)果,用show

tables顯示數(shù)據(jù)庫(kù)中有哪些表:

mysql

show

tables;

+---------------------+

|

tables

in

menagerie

|

+---------------------+

|

mytables

|

+---------------------+

5、顯示表的結(jié)構(gòu):

mysql

describe

mytable;

+-------------+-------------+------+-----+---------+-------+

|

field

|

type

|

null

|

key

|

default

|

extra

|

+-------------+-------------+------+-----+---------+-------+

|

name

|

varchar(20)

|

yes

|

|

null

|

|

|

sex

|

char(1)

|

yes

|

|

null

|

|

|

birth

|

date

|

yes

|

|

null

|

|

|

deathaddr

|

varchar(20)

|

yes

|

|

null

|

|

+-------------+-------------+------+-----+---------+-------+

4

rows

in

set

(0.00

sec)

6、

往表中加入記錄

我們先用select命令來(lái)查看表中的數(shù)據(jù):

mysql

select

*

from

mytable;

empty

set

(0.00

sec)

這說(shuō)明剛才創(chuàng)建的表還沒(méi)有記錄。

加入一條新記錄:

mysql

insert

into

mytable

-

values

(′abccs′,′f′,′1977-07-07′,′china′);

query

ok,

1

row

affected

(0.05

sec)

再用上面的select命令看看發(fā)生了什么變化。我們可以按此方法一條一條地將所有員工的記錄加入到表中。

如何選擇合適的MySQL存儲(chǔ)引擎

MyISAM:默認(rèn)的MySQL 插件式存儲(chǔ)引擎。如果應(yīng)用是以讀操作和插入操作為主,

只有很少的更新和刪除操作,并且對(duì)事務(wù)的完整性、并發(fā)性要求不是很高,那么選擇這個(gè)存

儲(chǔ)引擎是非常適合的。MyISAM 是在Web、數(shù)據(jù)倉(cāng)儲(chǔ)和其他應(yīng)用環(huán)境下最常使用的存儲(chǔ)引擎

之一。

. InnoDB:用于事務(wù)處理應(yīng)用程序,支持外鍵。如果應(yīng)用對(duì)事務(wù)的完整性有比較高的

要求,在并發(fā)條件下要求數(shù)據(jù)的一致性,數(shù)據(jù)操作除了插入和查詢(xún)以外,還包括很多的更新、

刪除操作,那么InnoDB 存儲(chǔ)引擎應(yīng)該是比較合適的選擇。InnoDB 存儲(chǔ)引擎除了有效地降低

由于刪除和更新導(dǎo)致的鎖定,還可以確保事務(wù)的完整提交(Commit)和回滾(Rollback),

對(duì)于類(lèi)似計(jì)費(fèi)系統(tǒng)或者財(cái)務(wù)系統(tǒng)等對(duì)數(shù)據(jù)準(zhǔn)確性要求比較高的系統(tǒng),InnoDB 都是合適的選

擇。

MEMORY:將所有數(shù)據(jù)保存在RAM 中,在需要快速定位記錄和其他類(lèi)似數(shù)據(jù)的環(huán)境

下,可提供極快的訪問(wèn)。MEMORY 的缺陷是對(duì)表的大小有限制,太大的表無(wú)法CACHE 在內(nèi)

存中,其次是要確保表的數(shù)據(jù)可以恢復(fù),數(shù)據(jù)庫(kù)異常終止后表中的數(shù)據(jù)是可以恢復(fù)的。

MEMORY 表通常用于更新不太頻繁的小表,用以快速得到訪問(wèn)結(jié)果。

. MERGE:用于將一系列等同的MyISAM 表以邏輯方式組合在一起,并作為一個(gè)對(duì)象

引用它們。MERGE 表的優(yōu)點(diǎn)在于可以突破對(duì)單個(gè)MyISAM 表大小的限制,并且通過(guò)將不同

的表分布在多個(gè)磁盤(pán)上,可以有效地改善MERGE 表的訪問(wèn)效率。這對(duì)于諸如數(shù)據(jù)倉(cāng)儲(chǔ)等VLDB

環(huán)境十分適合。


新聞標(biāo)題:mysql怎么選擇引擎 mysql 引擎選擇
URL分享:http://weahome.cn/article/doepcdp.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部