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

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

怎么使用MySQL引擎 mysql使用的引擎

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

存儲引擎是什么?

10年積累的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有融安免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

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

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

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

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

如何確定有哪些存儲引擎可用

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

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)??

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

對于MySQL 以前版本 可以使用mysql show variables like have_% (顯示類似 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)? ??

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

使用一個指定的存儲引擎

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

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

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

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

ALTER TABLE mytable ENGINE = MyISAM

然而 你在以這種方式修改表格類型的時候需要非常仔細(xì) 因?yàn)閷Σ恢С滞瑯拥乃饕?字段類型或者表大小的一個類型進(jìn)行修改可能使你丟失數(shù)據(jù) 如果你指定一個在你的當(dāng)前的數(shù)據(jù)庫中不存在的一個存儲引擎 那么就會創(chuàng)建一個MyISAM(默認(rèn)的)類型的表

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

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

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

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

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

鎖定

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

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

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

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

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

建立索引

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

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

事務(wù)處理

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

lishixinzhi/Article/program/MySQL/201311/29301

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

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

mysql

show

databases;

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

|

database

|

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

|

mysql

|

|

test

|

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

3

rows

in

set

(0.00

sec)

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

mysql

create

database

abccs;

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

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

mysql

use

abccs

database

changed

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

4、

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

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

mysql

show

tables;

empty

set

(0.00

sec)

說明剛才建立的數(shù)據(jù)庫中還沒有數(shù)據(jù)庫表。下面來創(chuàng)建一個數(shù)據(jù)庫表mytable:

我們要建立一個你公司員工的生日表,表的內(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,其長度不一定是20??梢赃x擇從1到255的任何長度,如果以后需要改變它的字長,可以使用alter

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

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

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

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命令來查看表中的數(shù)據(jù):

mysql

select

*

from

mytable;

empty

set

(0.00

sec)

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

加入一條新記錄:

mysql

insert

into

mytable

-

values

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

query

ok,

1

row

affected

(0.05

sec)

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

如何選擇MySQL存儲引擎

MySQL有多種存儲引擎,每種存儲引擎有各自的優(yōu)缺點(diǎn),可以擇優(yōu)選擇使用:

MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。

MySQL支持?jǐn)?shù)個存儲引擎作為對不同表的類型的處理器。MySQL存儲引擎包括處理事務(wù)安全表的引擎和處理非事務(wù)安全表的引擎:

· MyISAM管理非事務(wù)表。它提供高速存儲和檢索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默認(rèn)的存儲引擎,除非你配置MySQL默認(rèn)使用另外一個引擎。

· MEMORY存儲引擎提供“內(nèi)存中”表。MERGE存儲引擎允許集合將被處理同樣的MyISAM表作為一個單獨(dú)的表。就像MyISAM一樣,MEMORY和MERGE存儲引擎處理非事務(wù)表,這兩個引擎也都被默認(rèn)包含在MySQL中。

注釋:MEMORY存儲引擎正式地被確定為HEAP引擎。

· InnoDB和BDB存儲引擎提供事務(wù)安全表。BDB被包含在為支持它的操作系統(tǒng)發(fā)布的MySQL-Max二進(jìn)制分發(fā)版里。InnoDB也默認(rèn)被包括在所 有MySQL 5.1二進(jìn)制分發(fā)版里,你可以按照喜好通過配置MySQL來允許或禁止任一引擎。

· EXAMPLE存儲引擎是一個“存根”引擎,它不做什么。你可以用這個引擎創(chuàng)建表,但沒有數(shù)據(jù)被存儲于其中或從其中檢索。這個引擎的目的是服務(wù),在 MySQL源代碼中的一個例子,它演示說明如何開始編寫新存儲引擎。同樣,它的主要興趣是對開發(fā)者。

· NDB Cluster是被MySQL Cluster用來實(shí)現(xiàn)分割到多臺計(jì)算機(jī)上的表的存儲引擎。它在MySQL-Max 5.1二進(jìn)制分發(fā)版里提供。這個存儲引擎當(dāng)前只被Linux, Solaris, 和Mac OS X 支持。在未來的MySQL分發(fā)版中,我們想要添加其它平臺對這個引擎的支持,包括Windows。

· ARCHIVE存儲引擎被用來無索引地,非常小地覆蓋存儲的大量數(shù)據(jù)。

· CSV存儲引擎把數(shù)據(jù)以逗號分隔的格式存儲在文本文件中。

· BLACKHOLE存儲引擎接受但不存儲數(shù)據(jù),并且檢索總是返回一個空集。

· FEDERATED存儲引擎把數(shù)據(jù)存在遠(yuǎn)程數(shù)據(jù)庫中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未來的分發(fā)版中,我們想要讓它使用其它驅(qū)動器或客戶端連接方法連接到另外的數(shù)據(jù)源。

比較常用的是MyISAM和InnoBD

mysql怎么啟用innodb數(shù)據(jù)庫引擎

臨時表的存儲引擎

在 MySQL 5.6 之前,所有磁盤上的臨時表都默認(rèn)創(chuàng)建為 MyISAM 類型。臨時表是在內(nèi)存中,還是在磁盤上創(chuàng)建,具體取決于配置,并在查詢結(jié)束時立即刪除。從 MySQL 5.7 開始,它們默認(rèn)創(chuàng)建為 InnoDB 類型。

新默認(rèn)值可提升整體性能,大多數(shù)情況下都是最佳選擇。

可以使用新的配置項(xiàng)來設(shè)置臨時表的存儲引擎:internal_tmp_disk_storage_engine ,可選值為 InnoDB(默認(rèn))或 MyISAM。

InnoDB 類型的臨時表存在的潛在問題

盡管使用 InnoDB 是性能最佳的,但可能會出現(xiàn)新的潛在問題。在某些特定情況下,您可能會出現(xiàn)磁盤耗盡和服務(wù)器中斷。

與數(shù)據(jù)庫中的任何其他 InnoDB 表一樣,臨時表具有自己的表空間文件。新文件與通用表空間一起位于數(shù)據(jù)目錄中,名稱為 ibtmp1。它存儲所有 tmp 表。不運(yùn)行手動運(yùn)行 OPTIMIZE TABLE,表空間文件就會不斷增長。如果你不能使用 OPTIMIZE,那么唯一能將 ibtmp1 大小縮小為零的方法,就是重新啟動服務(wù)器。幸運(yùn)的是,即使文件無法減小,在執(zhí)行查詢后,臨時表也會自動刪除,表空間可回收使用?,F(xiàn)在,我們想一想以下情境:

存在未優(yōu)化的查詢,需要在磁盤上創(chuàng)建非常大的的臨時表

存在優(yōu)化的查詢,但他們正在磁盤上創(chuàng)建非常大的臨時表,因?yàn)槟阏趯Υ藬?shù)據(jù)集進(jìn)行計(jì)算(統(tǒng)計(jì),分析)

高并發(fā)連接時,運(yùn)行相同的查詢,伴隨臨時表的創(chuàng)建

沒有很多可用空間

在這些情況下,文件 ibtmp1 大大增加,很容易耗盡可用空間。這種情況每天發(fā)生幾次,并且必須重啟服務(wù)器才能完全縮小 ibtmp1 表空間。使用不可收縮的文件可以輕松耗盡磁盤空間!

mysql的memory引擎 怎么用

MySQL中的存儲引擎:

1、存儲引擎的概念

2、查看MySQL所支持的存儲引擎

3、MySQL中幾種常用存儲引擎的特點(diǎn)

4、存儲引擎之間的相互轉(zhuǎn)化


網(wǎng)站欄目:怎么使用MySQL引擎 mysql使用的引擎
文章源于:http://weahome.cn/article/hpgcsc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部