mysql主要有什么问题_mysql问题
什么是索引?
索引是一個(gè)單獨(dú)的、物理的數(shù)據(jù)庫結(jié)構(gòu),它是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識這些值的數(shù)據(jù)頁的邏輯指針清單。
一個(gè)表的存儲(chǔ)是由兩部分組成的,一部分用來存放表的數(shù)據(jù)頁面,另一部分存放索引頁面
為什么要使用索引?
如果沒有索引,執(zhí)行查詢時(shí)MySQL必須從第一個(gè)記錄開始掃描整個(gè)表 的所有記錄,直至找到符合要求的記錄。表里面的記錄數(shù)量越多,這個(gè)操作的代價(jià)就越高。如果作為搜索條件的列上已經(jīng)創(chuàng)建了索引,MySQL無需掃描任何記錄 即可迅速得到目標(biāo)記錄所在的位置。如果表有1000個(gè)記錄,通過索引查找記錄至少要比順序掃描記錄快100倍。
使用索引為什么能加快查詢速度?
第一,通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。第二,可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。第三,可以加速表和表之間的連接,特別是在實(shí)現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。第四,在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間。第五,通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
怎樣使用索引?
在經(jīng)常需要搜索的列上,可以加快搜索的速度;在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,其指定的范圍是連續(xù)的;在經(jīng)常需要排序的列上創(chuàng)建索引,因?yàn)樗饕呀?jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時(shí)間;在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。
索引的種類?
FULLTEXT,HASH,BTREE,RTREE
FULLTEXT: 全文索引并不是和MyISAM一起誕生的,它的出現(xiàn)是為了解決WHERE name LIKE “%word%"這類針對文本的模糊查詢效率較低的問題。
HASH: hash就是一種(key=>value)形式的鍵值對,由于hash索引可以一次定位,不需要像樹形索引那樣逐層查找,因此具有極高的效率。
BTREE: BTREE索引就是一種將索引值按一定的算法,存入一個(gè)樹形的數(shù)據(jù)結(jié)構(gòu)中
RTREE: 僅支持geometry數(shù)據(jù)類型,支持該類型的存儲(chǔ)引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種。相對于BTREE,RTREE的優(yōu)勢在于范圍查找.
mysql有什么引擎?
MyISAM
該引擎基于ISAM數(shù)據(jù)庫引擎,除了提供ISAM(該引擎在讀取數(shù)據(jù)方面速度很快,而且不占用大量的內(nèi)存和存儲(chǔ)資源;但是ISAM不支持事務(wù)處理、不支持外來鍵、不能夠容錯(cuò)、也不支持索引。該引擎在包括MySQL 5.1及其以上版本的數(shù)據(jù)庫中不再支持。)里所沒有的索引和字段管理等大量功能,MyISAM還使用一種表格鎖定的機(jī)制來優(yōu)化多個(gè)并發(fā)的讀寫操作,但是需要經(jīng)常運(yùn)行OPTIMIZE
TABLE命令,來恢復(fù)被更新機(jī)制所浪費(fèi)的空間,否則碎片也會(huì)隨之增加,最終影響數(shù)據(jù)訪問性能。MyISAM還有一些有用的擴(kuò)展,例如用來修復(fù)數(shù)據(jù)庫文件的MyISAMChk工具和用來恢復(fù)浪費(fèi)空間的
MyISAMPack工具。MyISAM強(qiáng)調(diào)了快速讀取操作,主要用于高負(fù)載的select,這可能也是MySQL深受Web開發(fā)的主要原因:在Web開發(fā)中進(jìn)行的大量數(shù)據(jù)操作都是讀取操作,所以大多數(shù)虛擬主機(jī)提供商和Internet平臺(tái)提供商(Internet
Presence Provider,IPP)只允許使用MyISAM格式。
MyISAM類型的表支持三種不同的存儲(chǔ)結(jié)構(gòu):靜態(tài)型、動(dòng)態(tài)型、壓縮型。
靜態(tài)型:指定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的數(shù)據(jù)類型),這樣MySQL就會(huì)自動(dòng)使用靜態(tài)MyISAM格式。使用靜態(tài)格式的表的性能比較高,因?yàn)樵诰S護(hù)和訪問以預(yù)定格式存儲(chǔ)數(shù)據(jù)時(shí)需要的開銷很低;但這種高性能是以空間為代價(jià)換來的,因?yàn)樵诙x的時(shí)候是固定的,所以不管列中的值有多大,都會(huì)以最大值為準(zhǔn),占據(jù)了整個(gè)空間。
動(dòng)態(tài)型:如果列(即使只有一列)定義為動(dòng)態(tài)的(xblob, xtext,
varchar等數(shù)據(jù)類型),這時(shí)MyISAM就自動(dòng)使用動(dòng)態(tài)型,雖然動(dòng)態(tài)型的表占用了比靜態(tài)型表較少的空間,但帶來了性能的降低,因?yàn)槿绻硞€(gè)字段的內(nèi)容發(fā)生改變則其位置很可能需要移動(dòng),這樣就會(huì)導(dǎo)致碎片的產(chǎn)生,隨著數(shù)據(jù)變化的增多,碎片也隨之增加,數(shù)據(jù)訪問性能會(huì)隨之降低。
對于因碎片增加而降低數(shù)據(jù)訪問性這個(gè)問題,有兩種解決辦法:
a、盡可能使用靜態(tài)數(shù)據(jù)類型;
b、經(jīng)常使用optimize table
table_name語句整理表的碎片,恢復(fù)由于表數(shù)據(jù)的更新和刪除導(dǎo)致的空間丟失。如果存儲(chǔ)引擎不支持 optimize table
table_name則可以轉(zhuǎn)儲(chǔ)并? ? ? ??重新加載數(shù)據(jù),這樣也可以減少碎片;
壓縮型:如果在數(shù)據(jù)庫中創(chuàng)建在整個(gè)生命周期內(nèi)只讀的表,則應(yīng)該使用MyISAM的壓縮型表來減少空間的占用。
HEAP(也稱為MEMORY)
該存儲(chǔ)引擎通過在內(nèi)存中創(chuàng)建臨時(shí)表來存儲(chǔ)數(shù)據(jù)。每個(gè)基于該存儲(chǔ)引擎的表實(shí)際對應(yīng)一個(gè)磁盤文件,該文件的文件名和表名是相同的,類型為.frm。該磁盤文件只存儲(chǔ)表的結(jié)構(gòu),而其數(shù)據(jù)存儲(chǔ)在內(nèi)存中,所以使用該種引擎的表擁有極高的插入、更新和查詢效率。這種存儲(chǔ)引擎默認(rèn)使用哈希(HASH)索引,其速度比使用B-+Tree型要快,但也可以使用B樹型索引。由于這種存儲(chǔ)引擎所存儲(chǔ)的數(shù)據(jù)保存在內(nèi)存中,所以其保存的數(shù)據(jù)具有不穩(wěn)定性,比如如果mysqld進(jìn)程發(fā)生異常、重啟或計(jì)算機(jī)關(guān)機(jī)等等都會(huì)造成這些數(shù)據(jù)的消失,所以這種存儲(chǔ)引擎中的表的生命周期很短,一般只使用一次。
CSV(Comma-Separated Values逗號分隔值)
使用該引擎的MySQL數(shù)據(jù)庫表會(huì)在MySQL安裝目錄data文件夾中的和該表所在數(shù)據(jù)庫名相同的目錄中生成一個(gè).CSV文件(所以,它可以將CSV類型的文件當(dāng)做表進(jìn)行處理),這種文件是一種普通文本文件,每個(gè)數(shù)據(jù)行占用一個(gè)文本行。該種類型的存儲(chǔ)引擎不支持索引,即使用該種類型的表沒有主鍵列;另外也不允許表中的字段為null。
BLACKHOLE(黑洞引擎)
該存儲(chǔ)引擎支持事務(wù),而且支持mvcc的行級鎖,寫入這種引擎表中的任何數(shù)據(jù)都會(huì)消失,主要用于做日志記錄或同步歸檔的中繼存儲(chǔ),這個(gè)存儲(chǔ)引擎除非有特別目的,否則不適合使用。詳見博客《
ARCHIVE
該存儲(chǔ)引擎非常適合存儲(chǔ)大量獨(dú)立的、作為歷史記錄的數(shù)據(jù)。區(qū)別于InnoDB和MyISAM這兩種引擎,ARCHIVE提供了壓縮功能,擁有高效的插入速度,但是這種引擎不支持索引,所以查詢性能較差一些。
PERFORMANCE_SCHEMA
該引擎主要用于收集數(shù)據(jù)庫服務(wù)器性能參數(shù)。這種引擎提供以下功能:提供進(jìn)程等待的詳細(xì)信息,包括鎖、互斥變量、文件信息;保存歷史的事件匯總信息,為提供MySQL服務(wù)器性能做出詳細(xì)的判斷;對于新增和刪除監(jiān)控事件點(diǎn)都非常容易,并可以隨意改變mysql服務(wù)器的監(jiān)控周期,例如(CYCLE、MICROSECOND)。
InnoDB
該存儲(chǔ)引擎為MySQL表提供了ACID事務(wù)支持、系統(tǒng)崩潰修復(fù)能力和多版本并發(fā)控制(即MVCC
Multi-Version Concurrency
Control)的行級鎖;該引擎支持自增長列(auto_increment),自增長列的值不能為空,如果在使用的時(shí)候?yàn)榭談t自動(dòng)從現(xiàn)有值開始增值,如果有但是比現(xiàn)在的還大,則直接保存這個(gè)值;
該引擎存儲(chǔ)引擎支持外鍵(foreign key)
,外鍵所在的表稱為子表而所依賴的表稱為父表。該引擎在5.5后的MySQL數(shù)據(jù)庫中為默認(rèn)存儲(chǔ)引擎。
Berkeley(BDB)
該存儲(chǔ)引擎支持COMMIT和ROLLBACK等其他事務(wù)特性。該引擎在包括MySQL 5.1及其以上版本的數(shù)據(jù)庫中不再支持。
Merge
該引擎將一定數(shù)量的MyISAM表聯(lián)合而成一個(gè)整體。參見博客《
總結(jié)
以上是生活随笔為你收集整理的mysql主要有什么问题_mysql问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本田鹰仔100前刹车油怎么换?
- 下一篇: 艾瑞泽gx为什么停产?