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