本文目錄一覽:
- 1、超詳細MySQL資料庫優化
- 2、MySQL 簡介 www.shulanxt.com?
- 3、MySQL資料庫引擎MyISAM和InnoDB的區別介紹
- 4、什麼是網站資料庫?什麼是Access資料庫?什麼是MSSQL資料庫?什麼是MYSQL資料庫?資料庫到底是什麼?
- 5、oracle資料庫和mysql資料庫的區別
超詳細MySQL資料庫優化
資料庫優化一方面是找出系統的瓶頸,提高MySQL資料庫的整體性能,而另一方面需要合理的結構設計和參數調整,以提高用戶的相應速度,同時還要儘可能的節約系統資源,以便讓系統提供更大的負荷.
1. 優化一覽圖
2. 優化
筆者將優化分為了兩大類,軟優化和硬優化,軟優化一般是操作資料庫即可,而硬優化則是操作伺服器硬體及參數設置.
2.1 軟優化
2.1.1 查詢語句優化
1.首先我們可以用EXPLAIN或DESCRIBE(簡寫:DESC)命令分析一條查詢語句的執行信息.
2.例:
顯示:
其中會顯示索引和查詢數據讀取數據條數等信息.
2.1.2 優化子查詢
在MySQL中,盡量使用JOIN來代替子查詢.因為子查詢需要嵌套查詢,嵌套查詢時會建立一張臨時表,臨時表的建立和刪除都會有較大的系統開銷,而連接查詢不會創建臨時表,因此效率比嵌套子查詢高.
2.1.3 使用索引
索引是提高資料庫查詢速度最重要的方法之一,關於索引可以參高筆者MySQL資料庫索引一文,介紹比較詳細,此處記錄使用索引的三大注意事項:
2.1.4 分解表
對於欄位較多的表,如果某些欄位使用頻率較低,此時應當,將其分離出來從而形成新的表,
2.1.5 中間表
對於將大量連接查詢的表可以創建中間表,從而減少在查詢時造成的連接耗時.
2.1.6 增加冗餘欄位
類似於創建中間表,增加冗餘也是為了減少連接查詢.
2.1.7 分析表,,檢查表,優化表
分析表主要是分析表中關鍵字的分布,檢查表主要是檢查表中是否存在錯誤,優化表主要是消除刪除或更新造成的表空間浪費.
1. 分析表: 使用 ANALYZE 關鍵字,如ANALYZE TABLE user;
2. 檢查表: 使用 CHECK關鍵字,如CHECK TABLE user [option]
option 只對MyISAM有效,共五個參數值:
3. 優化表:使用OPTIMIZE關鍵字,如OPTIMIZE [LOCAL|NO_WRITE_TO_BINLOG] TABLE user;
LOCAL|NO_WRITE_TO_BINLOG都是表示不寫入日誌.,優化表只對VARCHAR,BLOB和TEXT有效,通過OPTIMIZE TABLE語句可以消除文件碎片,在執行過程中會加上只讀鎖.
2.2 硬優化
2.2.1 硬體三件套
1.配置多核心和頻率高的cpu,多核心可以執行多個線程.
2.配置大內存,提高內存,即可提高緩存區容量,因此能減少磁碟I/O時間,從而提高響應速度.
3.配置高速磁碟或合理分布磁碟:高速磁碟提高I/O,分布磁碟能提高並行操作的能力.
2.2.2 優化資料庫參數
優化資料庫參數可以提高資源利用率,從而提高MySQL伺服器性能.MySQL服務的配置參數都在my.cnf或my.ini,下面列出性能影響較大的幾個參數.
2.2.3 分庫分表
因為資料庫壓力過大,首先一個問題就是高峰期系統性能可能會降低,因為資料庫負載過高對性能會有影響。另外一個,壓力過大把你的資料庫給搞掛了怎麼辦?所以此時你必須得對系統做分庫分表 + 讀寫分離,也就是把一個庫拆分為多個庫,部署在多個資料庫服務上,這時作為主庫承載寫入請求。然後每個主庫都掛載至少一個從庫,由從庫來承載讀請求。
2.2.4 緩存集群
如果用戶量越來越大,此時你可以不停的加機器,比如說系統層面不停加機器,就可以承載更高的並發請求。然後資料庫層面如果寫入並發越來越高,就擴容加資料庫伺服器,通過分庫分表是可以支持擴容機器的,如果資料庫層面的讀並發越來越高,就擴容加更多的從庫。但是這裡有一個很大的問題:資料庫其實本身不是用來承載高並發請求的,所以通常來說,資料庫單機每秒承載的並發就在幾千的數量級,而且資料庫使用的機器都是比較高配置,比較昂貴的機器,成本很高。如果你就是簡單的不停的加機器,其實是不對的。所以在高並發架構里通常都有緩存這個環節,緩存系統的設計就是為了承載高並發而生。所以單機承載的並發量都在每秒幾萬,甚至每秒數十萬,對高並發的承載能力比資料庫系統要高出一到兩個數量級。所以你完全可以根據系統的業務特性,對那種寫少讀多的請求,引入緩存集群。具體來說,就是在寫資料庫的時候同時寫一份數據到緩存集群里,然後用緩存集群來承載大部分的讀請求。這樣的話,通過緩存集群,就可以用更少的機器資源承載更高的並發。
一個完整而複雜的高並發系統架構中,一定會包含:各種複雜的自研基礎架構系統。各種精妙的架構設計.因此一篇小文頂多具有拋磚引玉的效果,但是資料庫優化的思想差不多就這些了.
MySQL 簡介 www.shulanxt.com?
什麼是資料庫?
資料庫是一個以某種有組織的方式存儲的數據集合,它是一個按數據結構來存儲和管理數據的計算機軟體系統。理解資料庫的一種最簡單的辦法是將其想像為一個文件櫃,這個文件櫃只是一個存儲數據的空間,而資料庫就是這麼一個空間。
資料庫管理系統(Database Management System, DBMS)是用於創建、管理、和維護資料庫時所使用的軟體,用以管理資料庫,一定程度上,用戶都是在操作DBMS,所以日常的資料庫概念一般就是指DBMS。
常見的資料庫軟體DBMS有甲骨文的Oracle、微軟的Access、MongoDB等,還有我們教程要介紹的MySQL。
什麼是MySQL?
MySQL是一種DBMS,而且是一種一個小型的開源的關係型資料庫管理系統。2008年1月16日MySQL AB被Sun公司收購。而2009年,SUN又被Oracle收購。就這樣如同一個輪迴,MySQL成為了Oracle公司的另一個資料庫項目。
MySQL它在世界範圍內得到了廣泛的安裝和使用,應該是使用人數最多的資料庫軟體了,因為它有著這樣的特性:
成本——MySQL是開源軟體,可以免費使用和修改。
性能——MySQL性能很好處理速度很快。
簡單——MySQL很容易安裝和使用,對新手友好。
MySQL資料庫軟體也是使用最常用的資料庫管理語言:結構化查詢語言(SQL)進行資料庫管理和操作。
教程來源:樹懶學堂_一站式數據知識平台_MySQL 簡介
MySQL資料庫引擎MyISAM和InnoDB的區別介紹
MySQL資料庫有多種存儲引擎:比如:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE等等,最常見的也就是MyISAM和InnoDB了,下面主要講解下MyISAM和InnoDB兩種mysql資料庫存儲引擎的區別。
MyISAM引擎是一種非事務性的引擎,提供高速存儲和檢索,以及全文搜索能力,適合數據倉庫等查詢頻繁的應用。MyISAM中,一個table實際保存為三個文件,.frm存儲表定義,.MYD存儲數據,.MYI存儲索引。MyISAM在所有MySQL配置里被支持,它是默認的存儲引擎,除非你配置MySQL默認使用另外一個引擎。
MySQL伺服器中的其他非事務性存儲引擎(如MyISAM)遵從不同的數據完整性範例,稱之為「原子操作」。按照事務術語,MyISAM表總能高效地工作在AUTOCOMMIT=1模式下。原子操作通常能提供可比較的完整性以及更好的性能。與經過優化調整的最快的事務性表相比,它的速度快3~5倍。由於MySQL伺服器支持兩種範例,因而你能決定是否利用原子操作的速度更好地服務於你的應用程序,或使用事務特性。該選擇可按表進行。
InnoDB則是一種支持事務的引擎。給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。所以的數據存儲在一個或者多個數據文件中,支持類似於Oracle的鎖機制。一般在OLTP應用中使用較廣泛。如果沒有指定InnoDB配置選項,MySQL將在MySQL數據目錄下創建一個名為ibdata1的自動擴展數據文件,以及兩個名為ib_logfile0和ib_logfile1的日誌文件。
InnoDB鎖定在行級並且也在SELECT語句提供一個Oracle風格一致的非鎖定讀。這些特色增加了多用戶部署和性能。沒有在InnoDB中擴大鎖定的需要,因為在InnoDB中行級鎖定適合非常小的空間。InnoDB也支持FOREIGN KEY強制。在SQL查詢中,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個查詢中也可以混合。
InnoDB是為處理巨大數據量時的最大性能設計。它的CPU效率可能是任何其它基於磁碟的關係資料庫引擎所不能匹敵的。InnoDB存儲引擎被完全與MySQL伺服器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩衝池。
InnoDB存儲它的表&索引在一個表空間中,表空間可以包含數個文件。InnoDB表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上。InnoDB也默認被包括在所有MySQL 5.1二進位分發版里。
什麼是網站資料庫?什麼是Access資料庫?什麼是MSSQL資料庫?什麼是MYSQL資料庫?資料庫到底是什麼?
IT專家網
建立網站如何選擇適合自己的資料庫
作者: , 出處:IT專家網社區, 責任編輯: 李書琴, 2007-10-29 11:06
大家知道,常用的資料庫一般是分為三種: (一)、Access (二)SQL Server(三)MySQL,那麼,用戶想做一個網站,到底哪一種資料庫是適合自己的呢?以下給大家介紹一下常用的資料庫有什麼區別或是功能方面……
不少企業和個人站長在網站製作時,會對資料庫的概念產生迷惑或誤解。究竟使用什麼樣的資料庫才好了?合適的才是最好的。下面是一些關於資料庫的詳細資料。建議打算建立網站的企業和個人站長,新手網站管理員閱讀一下。聽聽92HeZu網專家對於資料庫的解釋,讓大家更好的了解資料庫,從而確定合適的建站方案。
大家知道,常用的資料庫一般是分為三種: (一)、Access (二)SQL Server(三)MySQL,那麼,用戶想做一個網站,到底哪一種資料庫是適合自己的呢?以下給大家介紹一下常用的資料庫有什麼區別或是功能方面。
Access是一種桌面資料庫,只適合數據量少的應用,在處理少量數據和單機訪問的資料庫時是很好的,效率也很高。但是它的同時訪問客戶端不能多於4個。access資料庫有一定的極限,如果數據達到100M左右,很容易造成伺服器iis假死,或者消耗掉伺服器的內存導致伺服器崩潰。
SQL Server是基於伺服器端的中型的資料庫,可以適合大容量數據的應用,在功能上管理上也要比Access要強得多。在處理海量數據的效率,後台開發的靈活性,可擴展性等方面強大。因為現在資料庫都使用標準的SQL語言對資料庫進行管理,所以如果是標準SQL語言,兩者基本上都可以通用的。92HeZu網全部雙線合租空間均可使用Access資料庫,同時也支持SQL Server。SQL Server還有更多的擴展,可以用存儲過程,資料庫大小無極限限制。
SQL Server 特點:
1.真正的客戶機/伺服器體系結構。
2.圖形化用戶界面,使系統管理和資料庫管理更加直觀、簡單。
3.豐富的編程介面工具,為用戶進行程序設計提供了更大的選擇餘地。
4.SQL Server與Windows NT完全集成,利用了NT的許多功能,如發送和接受消息,管理登錄安全性等。SQL Server也可以很好地與microsoft BackOffice產品集成。
5.具有很好的伸縮性,可跨越從運行Windows 95/98的膝上型電腦到運行Windows 2000的大型多處理器等多種平台使用。
6.對Web技術的支持,使用戶能夠很容易地將資料庫中的數據發布到Web頁面上。
7.SQL Server提供數據倉庫功能,這個功能只在Oracle和其他更昂貴的DBMS中才有。
MySQL是一個開放源碼的小型關係型資料庫管理系統,開發者為瑞典MySQL AB公司,92HeZu網免費贈送MySQL。目前MySQL被廣泛地應用在Internet上的中小型網站中。提供由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫
MySQL特點:
1.MySql的核心程序採用完全的多線程編程。線程是輕量級的進程,它可以靈活地為用戶提供服務,而不過多的系統資源。
2.MySql可運行在不同的操作系統下。簡單地說,MySql可以支持Windows95/98/NT/2000以及UNIX、Linux和SUN OS等多種操作系統平台。
3.MySql有一個非常靈活而且安全的許可權和口令系統。當客戶與MySql伺服器連接時,他們之間所有的口令傳送被加密,而且MySql支持主機認證。
4.MySql支持ODBC for Windows。MySql支持所有的ODBC 2.5函數和其他許多函數,這樣就可以用Access連接MySql伺服器,從而使得MySql的應用被大大擴展。
5.MySql支持大型的資料庫。雖然對於用Php編寫的網頁來說只要能夠存放上百條以上的記錄數據就足夠了,但MySql可以方便地支持上千萬條記錄的資料庫。
6.MySql擁有一個非常快速而且穩定的基於線程的內存分配系統,可以持續使用面不必擔心其穩定性。
7.強大的查詢功能。MySql支持查詢的SELECT和WHERE語句的全部運算符和函數,並且可以在同一查詢中混用來自不同資料庫的表,從而使得查詢變得快捷和方便。
8.PHP為MySql提供了強力支持,PHP中提供了一整套的MySql函數,對MySql進行了全方位的支持。
92合租( ) 為廣大用戶量身定多種不同的虛擬主機及資料庫,所有資料庫定時備份,在線資料庫還原,導入等功能,使用方便,安全,穩定!三種資料庫各有特點,92HeZu網建議大家在選擇資料庫的時候可以根據自己的學習、工作情況來選擇。假如你是一個新手,可以選擇一個易操作、沒有太多輔助功能的資料庫系統,如ACCESS。通過對資料庫系統的實際操作,可以獲得一些感性認識,也會遇到一些問題,這些問題正是激發學習興趣的動力。雖然從DBMS理論的角度來講,ACCESS還不算完整,但是它們確實很實用。如果你是為實際工作選擇資料庫,則可以根據業務規模、流程、數據量、現有技術人員的技術水平、軟體環境等因素來綜合考慮,如可選擇MySql、Sqlserver。
oracle資料庫和mysql資料庫的區別
Oracle資料庫與MySQL資料庫的區別是本文我們主要介紹的內容,希望能夠對您有所幫助。
1.組函數用法規則
mysql中組函數在select語句中可以隨意使用,但在oracle中如果查詢語句中有組函數,那其他列名必須是組函數處理過的,或者是group by子句中的列否則報錯
eg:
select name,count(money) from user;這個放在mysql中沒有問題在oracle中就有問題了。
2.自動增長的數據類型處理
MYSQL有自動增長的數據類型,插入記錄時不用操作此欄位,會自動獲得數據值。ORACLE沒有自動增長的數據類型,需要建立一個自動增長的序列號,插入記錄時要把序列號的下一個值賦於此欄位。
CREATE SEQUENCE序列號的名稱(最好是表名+序列號標記)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;
其中最大的值按欄位的長度來定,如果定義的自動增長的序列號NUMBER(6),最大值為999999
INSERT語句插入這個欄位值為:序列號的名稱.NEXTVAL
3.單引號的處理
MYSQL里可以用雙引號包起字元串,ORACLE里只可以用單引號包起字元串。在插入和修改字元串前必須做單引號的替換:把所有出現的一個單引號替換成兩個單引號。
4.翻頁的SQL語句的處理
MYSQL處理翻頁的SQL語句比較簡單,用LIMIT開始位置,記錄個數;PHP里還可以用SEEK定位到結果集的位置。ORACLE處理翻頁的SQL語句就比較繁瑣了。每個結果集只有一個ROWNUM欄位標明它的位置,並且只能用ROWNUM100,不能用ROWNUM80。
以下是經過分析後較好的兩種ORACLE翻頁SQL語句(ID是唯一關鍵字的欄位名):
語句一:
SELECT ID, [FIELD_NAME,…] FROM
TABLE_NAME WHERE ID IN ( SELECT ID FROM (SELECT ROWNUM AS NUMROW, ID
FROM TABLE_NAME WHERE 條件1 ORDER BY 條件2) WHERE NUMROW 80 AND NUMROW
100 ) ORDER BY 條件3;
語句二:
SELECT * FROM (( SELECT ROWNUM AS
NUMROW, c.* from (select [FIELD_NAME,…] FROM TABLE_NAME WHERE 條件1
ORDER BY 條件2) c) WHERE NUMROW 80 AND NUMROW 100 ) ORDER BY
條件3;
5.長字元串的處理
長字元串的處理ORACLE也有它特殊的地方。INSERT和UPDATE時最大可操作的字元串長度小於等於4000個單位元組,如果要插入更長的字元串,請考慮欄位用CLOB類型,方法借用ORACLE里自帶的DBMS_LOB程序包。插入修改記錄前一定要做進行非空和長度判斷,不能為空的欄位值和超出長度欄位值都應該提出警告,返回上次操作。
6.日期欄位的處理
MYSQL日期欄位分DATE和TIME兩種,ORACLE日期欄位只有DATE,包含年月日時分秒信息,用當前資料庫的系統時間為SYSDATE,精確到秒,或者用字元串轉換成日期型函數TO_DATE(『2001-08-01』,』YYYY-MM-DD』)年-月-日24小時:分鐘:秒的格式YYYY-MM-DD
HH24:MI:SS TO_DATE()還有很多種日期格式,可以參看ORACLE
DOC.日期型欄位轉換成字元串函數TO_CHAR(『2001-08-01』,』YYYY-MM-DD HH24:MI:SS』)
日期欄位的數學運算公式有很大的不同。MYSQL找到離當前時間7天用DATE_FIELD_NAME
SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到離當前時間7天用 DATE_FIELD_NAME
SYSDATE – 7;
MYSQL中插入當前時間的幾個函數是:NOW()函數以`’YYYY-MM-DD
HH:MM:SS’返回當前的日期時間,可以直接存到DATETIME欄位中。CURDATE()以』YYYY-MM-DD』的格式返回今天的日期,可以直接存到DATE欄位中。CURTIME()以』HH:MM:SS』的格式返回當前的時間,可以直接存到TIME欄位中。例:insert
into tablename (fieldname) values (now())
而oracle中當前時間是sysdate
7.空字元的處理
MYSQL的非空欄位也有空的內容,ORACLE里定義了非空欄位就不容許有空的內容。按MYSQL的NOT NULL來定義ORACLE表結構,導數據的時候會產生錯誤。因此導數據時要對空字元進行判斷,如果為NULL或空字元,需要把它改成一個空格的字元串。
8.字元串的模糊比較
MYSQL里用欄位名like%『字元串%』,ORACLE里也可以用欄位名like%『字元串%』但這種方法不能使用索引,速度不快,用字元串比較函數instr(欄位名,『字元串』)0會得到更精確的查找結果。
9.程序和函數里,操作資料庫的工作完成後請注意結果集和指針的釋放。
=======================================================================================
1. Oracle是大型資料庫而Mysql是中小型資料庫,Oracle市場佔有率達40%,Mysql只有20%左右,同時Mysql是開源的而Oracle價格非常高。
2. Oracle支持大並發,大訪問量,是OLTP最好的工具。
3. 安裝所用的空間差別也是很大的,Mysql安裝完後才152M而Oracle有3G左右,且使用的時候Oracle佔用特別大的內存空間和其他機器性能。
4.Oracle也Mysql操作上的區別
①主鍵
Mysql一般使用自動增長類型,在創建表時只要指定表的主鍵為auto increment,插入記錄時,不需要再指定該記錄的主鍵值,Mysql將自動增長;Oracle沒有自動增長類型,主
鍵一般使用的序列,插入記錄時將序列號的下一個值付給該欄位即可;只是ORM框架是只要是native主鍵生成策略即可。
②單引號的處理
MYSQL里可以用雙引號包起字元串,ORACLE里只可以用單引號包起字元串。在插入和修改字元串前必須做單引號的替換:把所有出現的一個單引號替換成兩個單引號。
③翻頁的SQL語句的處理
MYSQL處理翻頁的SQL語句比較簡單,用LIMIT 開始位置, 記錄個數;ORACLE處理翻頁的SQL語句就比較繁瑣了。每個結果集只有一個ROWNUM欄位標明它的位置, 並且只能用
ROWNUM100, 不能用ROWNUM80
④ 長字元串的處理
長字元串的處理ORACLE也有它特殊的地方。INSERT和UPDATE時最大可操作的字元串長度小於等於4000個單位元組, 如果要插入更長的字元串, 請考慮欄位用CLOB類型,方法借用
ORACLE里自帶的DBMS_LOB程序包。插入修改記錄前一定要做進行非空和長度判斷,不能為空的欄位值和超出長度欄位值都應該提出警告,返回上次操作。
⑤空字元的處理
MYSQL的非空欄位也有空的內容,ORACLE里定義了非空欄位就不容許有空的內容。按MYSQL的NOT NULL來定義ORACLE表結構, 導數據的時候會產生錯誤。因此導數據時要對空字元
進行判斷,如果為NULL或空字元,需要把它改成一個空格的字元串。
⑥字元串的模糊比較
MYSQL里用 欄位名 like ‘%字元串%’,ORACLE里也可以用 欄位名 like ‘%字元串%’ 但這種方法不能使用索引, 速度不快。
⑦Oracle實現了ANSII SQL中大部分功能,如,事務的隔離級別、傳播特性等而Mysql在這方面還是比較的弱。
原創文章,作者:CJND,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/150092.html