一、MySQL varchar 二進(jìn)制模式是什么
MySQL varchar 二進(jìn)制模式是VARCHAR類型的一種子類型,通常用于存儲二進(jìn)制數(shù)據(jù)。在二進(jìn)制模式下,VARCHAR類型的長度限制是255個(gè)字符。通常情況下,VARCHAR類型存儲的是純文本字符數(shù)據(jù),而不是二進(jìn)制數(shù)據(jù)。當(dāng)存儲二進(jìn)制數(shù)據(jù)時(shí),可以使用二進(jìn)制模式的VARCHAR類型。在MySQL中,VARCHAR是一種可變長度的字符類型,用于存儲純文本字符數(shù)據(jù),非常多可存儲65535個(gè)字符。VARCHAR類型可以使用多種不同的字符集進(jìn)行存儲,包括ASCII和UNICODE等。
二進(jìn)制模式的VARCHAR類型將文本數(shù)據(jù)視為一組二進(jìn)制數(shù)據(jù),并使用字節(jié)的方式對其進(jìn)行存儲和檢索,不同于非二進(jìn)制模式的VARCHAR類型。對于長文本數(shù)據(jù),使用二進(jìn)制模式的VARCHAR類型可能會導(dǎo)致存儲空間的浪費(fèi)和查詢效率的降低。因此,在使用VARCHAR類型存儲二進(jìn)制數(shù)據(jù)時(shí),需要通過合理的數(shù)據(jù)類型和存儲方式來優(yōu)化存儲空間和性能。
二、MySQL介紹
1、簡介
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是較好的 RDBMS(Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性。MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型和大型網(wǎng)站的開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫。
2、系統(tǒng)特性
MySQL使用 C和 C++編寫,并使用了多種編譯器進(jìn)行測試,保證了源代碼的可移植性支持?AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統(tǒng)為多種編程語言提供了?API。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、.NET和 Tcl 等支持多線程,充分利用 CPU 資源優(yōu)化的?SQL查詢算法,有效地提高查詢速度既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫而嵌入到其他的軟件中提供多語言支持,常見的編碼如中文的?GB 2312、BIG5,日文的?Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名提供?TCP/IP、ODBC?和?JDBC等多種數(shù)據(jù)庫連接途徑提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫操作的管理工具支持大型的數(shù)據(jù)庫。可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫支持多種存儲引擎MySQL 是開源的,所以你不需要支付額外的費(fèi)用MySQL 使用標(biāo)準(zhǔn)的?SQL數(shù)據(jù)語言形式MySQL 對 PHP 有很好的支持,PHP是比較流行的 Web 開發(fā)語言MySQL是可以定制的,采用了 GPL協(xié)議,你可以修改源碼來開發(fā)自己的 MySQL 系統(tǒng)在線 DDL/更改功能,數(shù)據(jù)架構(gòu)支持動態(tài)應(yīng)用程序和開發(fā)人員靈活性復(fù)制全局事務(wù)標(biāo)識,可支持自我修復(fù)式集群復(fù)制無崩潰從機(jī),可提高可用性復(fù)制多線程從機(jī),可提高性能3倍更快的性能新的優(yōu)化器原生JSON支持多源復(fù)制GIS的空間擴(kuò)展3、存儲引擎
MyISAM:MySQL 5.0 之前的默認(rèn)數(shù)據(jù)庫引擎,最為常用。擁有較高的插入,查詢速度,但不支持事務(wù)InnoDB:事務(wù)型數(shù)據(jù)庫的優(yōu)選引擎,支持ACID事務(wù),支持行級鎖定,MySQL 5.5 起成為默認(rèn)數(shù)據(jù)庫引擎BDB:源自?Berkeley DB,事務(wù)型數(shù)據(jù)庫的另一種選擇,支持Commit 和Rollback 等其他事務(wù)特性Memory:所有數(shù)據(jù)置于內(nèi)存的存儲引擎,擁有極高的插入,更新和查詢效率。但是會占用和數(shù)據(jù)量成正比的內(nèi)存空間。并且其內(nèi)容會在 MySQL 重新啟動時(shí)丟失Merge:將一定數(shù)量的 MyISAM 表聯(lián)合而成一個(gè)整體,在超大規(guī)模數(shù)據(jù)存儲時(shí)很有用Archive:非常適合存儲大量的獨(dú)立的,作為歷史記錄的數(shù)據(jù)。因?yàn)樗鼈儾唤?jīng)常被讀取。Archive 擁有高效的插入速度,但其對查詢的支持相對較差Federated:將不同的 MySQL 服務(wù)器聯(lián)合起來,邏輯上組成一個(gè)完整的數(shù)據(jù)庫。非常適合分布式應(yīng)用Cluster/NDB:高冗余的存儲引擎,用多臺數(shù)據(jù)機(jī)器聯(lián)合提供服務(wù)以提高整體性能和安全性。適合數(shù)據(jù)量大,安全和性能要求高的應(yīng)用CSV:邏輯上由逗號分割數(shù)據(jù)的存儲引擎。它會在數(shù)據(jù)庫子目錄里為每個(gè)數(shù)據(jù)表創(chuàng)建一個(gè) .csv 文件。這是一種普通文本文件,每個(gè)數(shù)據(jù)行占用一個(gè)文本行。CSV 存儲引擎不支持索引BlackHole:黑洞引擎,寫入的任何數(shù)據(jù)都會消失,一般用于記錄 binlog 做復(fù)制的中繼EXAMPLE:存儲引擎是一個(gè)不做任何事情的存根引擎。它的目的是作為 MySQL?源代碼中的一個(gè)例子,用來演示如何開始編寫一個(gè)新存儲引擎。同樣,它的主要興趣是對開發(fā)者。EXAMPLE 存儲引擎不支持編索引4、查詢與索引
只有當(dāng)數(shù)據(jù)庫里已經(jīng)有了足夠多的測試數(shù)據(jù)時(shí),它的性能測試結(jié)果才有實(shí)際參考價(jià)值。如果在測試數(shù)據(jù)庫里只有幾百條數(shù)據(jù)記錄,它們往往在執(zhí)行完名列前茅條查詢命令之后就被全部加載到內(nèi)存里,這將使后續(xù)的查詢命令都執(zhí)行得非常快–不管有沒有使用索引。只有當(dāng)數(shù)據(jù)庫里的記錄超過了 1000 條、數(shù)據(jù)總量也超過了 MySQL 服務(wù)器上的內(nèi)存總量時(shí),數(shù)據(jù)庫的性能測試結(jié)果才有意義。
在不確定應(yīng)該在哪些數(shù)據(jù)列上創(chuàng)建索引的時(shí)候,人們從 EXPLAIN SELECT 命令那里往往可以獲得一些幫助。這其實(shí)只是簡單地給一條普通的 SELECT 命令加一個(gè) EXPLAIN 關(guān)鍵字作為前綴而已。有了這個(gè)關(guān)鍵字,MySQL 將不是去執(zhí)行那條 SELECT 命令,而是去對它進(jìn)行分析。MySQL 將以表格的形式把查詢的執(zhí)行過程和用到的索引等信息列出來。
在 EXPLAIN 命令的輸出結(jié)果里,第1列是從數(shù)據(jù)庫讀取的數(shù)據(jù)表的名字,它們按被讀取的先后順序排列。type列指定了本數(shù)據(jù)表與其它數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系(JOIN)。在各種類型的關(guān)聯(lián)關(guān)系當(dāng)中,效率較高的是 system,然后依次是 const、eq_ref、ref、range、index 和 All(All 的意思是:對應(yīng)于上一級數(shù)據(jù)表里的每一條記錄,這個(gè)數(shù)據(jù)表里的所有記錄都必須被讀取一遍,這種情況往往可以用一索引來避免)。
possible_keys 數(shù)據(jù)列給出了 MySQL 在搜索數(shù)據(jù)記錄時(shí)可選用的各個(gè)索引。key 數(shù)據(jù)列是 MySQL 實(shí)際選用的索引,這個(gè)索引按字節(jié)計(jì)算的長度在 key_len 數(shù)據(jù)列里給出。比如說,對于一個(gè) INTEGER 數(shù)據(jù)列的索引,這個(gè)字節(jié)長度將是4。如果用到了復(fù)合索引,在 key_len 數(shù)據(jù)列里還可以看到 MySQL 具體使用了它的哪些部分。作為一般規(guī)律,key_len 數(shù)據(jù)列里的值越小越好。
ref 數(shù)據(jù)列給出了關(guān)聯(lián)關(guān)系中另一個(gè)數(shù)據(jù)表里的數(shù)據(jù)列的名字。row 數(shù)據(jù)列是 MySQL 在執(zhí)行這個(gè)查詢時(shí)預(yù)計(jì)會從這個(gè)數(shù)據(jù)表里讀出的數(shù)據(jù)行的個(gè)數(shù)。row 數(shù)據(jù)列里的所有數(shù)字的乘積可以大致了解這個(gè)查詢需要處理多少組合。
最后,extra 數(shù)據(jù)列提供了與 JOIN 操作有關(guān)的更多信息,比如說,如果 MySQL 在執(zhí)行這個(gè)查詢時(shí)必須創(chuàng)建一個(gè)臨時(shí)數(shù)據(jù)表,就會在 extra 列看到 usingtemporary 字樣。
延伸閱讀1:MySQL的管理工具
可以使用命令行工具管理 MySQL 數(shù)據(jù)庫(命令 mysql 和 mysqladmin),也可以從 MySQL 的網(wǎng)站下載圖形管理工具 MySQL Administrator,MySQL Query Browser 和 MySQL Workbench。phpMyAdmin是由 php 寫成的 MySQL資料庫系統(tǒng)管理程程序,讓管理者可用 Web 界面管理 MySQL 資料庫。phpMyBackupPro也是由 PHP 寫成的,可以透過 Web 界面創(chuàng)建和管理數(shù)據(jù)庫。它可以創(chuàng)建偽 cronjobs,可以用來自動在某個(gè)時(shí)間或周期備份 MySQL 數(shù)據(jù)庫。另外,還有其他的 GUI 管理工具,例如 mysql-front 以及 ems mysql manager, navicat等等。