mysql1215_这15条MySQL改善经验必须收藏
MySQL 作為目前的主流開源數(shù)據(jù)庫, 既能挑戰(zhàn) “雙11”,又能扛起 “618”,比起網(wǎng)紅版數(shù)據(jù)庫,MySQL 絕對是實(shí)力擔(dān)當(dāng)。
1、 為查詢緩存優(yōu)化查詢
像 NOW() 和 RAND() 或是其它的諸如此類的SQL函數(shù)都不會開啟查詢緩存,謹(jǐn)慎使用
2、EXPLAIN 我們的SELECT查詢(可以查看執(zhí)行的行數(shù))
可以讓我們找到潛在的性能問題
3、當(dāng)只要一行數(shù)據(jù)時使用LIMIT 1
MySQL數(shù)據(jù)庫引擎會在查找到一條數(shù)據(jù)后停止搜索,而不是繼續(xù)往后查詢下一條符合條件的數(shù)據(jù)記錄。
4、為搜索字段建立索引
在識別度高的列上建立正確的索引,以提升性能
5、在Join表的時候使用相當(dāng)類型的列,并將其索引
關(guān)聯(lián)表的關(guān)鍵字段,類型一致,字符集一致,才能提高性能,否則無法使用它們的索引
6、千萬不要 ORDER BY RAND ()
執(zhí)行RAND()函數(shù)(很耗CPU時間),會讓你的數(shù)據(jù)庫的性能呈指數(shù)級的下降
7、 避免SELECT *
從數(shù)據(jù)庫里讀出越多的數(shù)據(jù),那么查詢就會變得越慢。
8、永遠(yuǎn)為每張表設(shè)置一個ID
我們應(yīng)該為數(shù)據(jù)庫里的每張表都設(shè)置一個ID做為其主鍵,而且最好的是一個INT型的(推薦使用UNSIGNED),并設(shè)置上自動增加的 AUTO_INCREMENT標(biāo)志。
9、可以使用ENUM 而不要VARCHAR
ENUM 類型是非常快和緊湊的。在實(shí)際上,其保存的是 TINYINT,但其外表上顯示為字符串。
10、盡可能的使用NOT NULL
如果不是特殊情況,盡可能的不要使用NULL。在MYSQL中對于INT類型而言,EMPTY是0,而NULL是空值。而在Oracle中 NULL和EMPTY的字符串是一樣的。NULL也需要占用存儲空間,并且會使我們的程序判斷時更加復(fù)雜。現(xiàn)實(shí)情況是很復(fù)雜的,依然會有些情況下,我們需要使用NULL值。
11、固定長度的表會更快
表中沒有如下類型的字段: VARCHAR,TEXT,BLOB。只要我們包括了其中一個這些字段,那么這個表就不是“固定長度靜態(tài)表”了,這樣,MySQL 引擎會用另一種方法來處理。 固定長度的表會提高性能,因?yàn)镸ySQL搜尋得會更快一些,因?yàn)檫@些固定的長度是很容易計算下一個數(shù)據(jù)的偏移量的,所以讀取的自然也會很快。
12、垂直分割
“垂直分割”是一種把數(shù)據(jù)庫中的表按列變成幾張表的方法,這樣可以降低表的復(fù)雜度和字段的數(shù)目,從而達(dá)到優(yōu)化的目的。
13、拆分打的DELETE或INSERT語句
這兩個操作是會鎖表的
14、越小的列會越快
對于大多數(shù)的數(shù)據(jù)庫引擎來說,硬盤操作可能是最重大的瓶頸。越小的列消耗的io資源越少
15、選擇正確的存儲引擎
MyISAM是MYSQL5.5版本以前默認(rèn)的存儲引擎,基于傳統(tǒng)的ISAM類型,支持B-Tree,全文檢索,但是不是事務(wù)安全的,而且不支持外鍵。不具有原子性。支持鎖表。
InnoDB是事務(wù)型引擎,支持ACID事務(wù)(實(shí)現(xiàn)4種事務(wù)隔離機(jī)制)、回滾、崩潰恢復(fù)能力、行鎖。以及提供與Oracle一致的不加鎖的讀取方式。InnoDB存儲它的表和索引在一個表空間中,表空間可以包含多個文件。
總結(jié)
以上是生活随笔為你收集整理的mysql1215_这15条MySQL改善经验必须收藏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql timestamp 插入nu
- 下一篇: mysql的二级分区_分布式数据库一级分