Mysql 36條軍規(guī)

核心

不在數(shù)據(jù)庫做運算

單表數(shù)據(jù)量:一年內(nèi)單表純INT不超過1000W没卸,含CHAR不超500W。單庫不超過300~400表

表字段盡量少瓣铣,上限控制在20~50個

適當(dāng)可以冗余(平衡范式和冗余)

拒絕大sql群扶,大事務(wù),大批量

字段

數(shù)值類型的字節(jié)和運用范圍

如果可以毫蚓,將字符串轉(zhuǎn)化為數(shù)字存儲∥羯疲可以加快查詢速度和節(jié)省空間,舉例用INT代替CHAR(15)來存儲IP

優(yōu)先使用SET和ENUM...(可能有問題!)

避免使用NULL

少用TEXT/BLOB畔乙,如果必須使用(超過varchar最大限制64k)則必須拆分到單獨的表

不在數(shù)據(jù)庫存圖片

索引

能不加的索引盡量不加君仆,最好不超過字段數(shù)的20%(如:性別不加),結(jié)合核心SQL優(yōu)先考慮覆蓋索引(https://my.oschina.net/BearCatYN/blog/476748)

字符字段必須建前綴索引牲距。由于字符串很長,通常可以索引開始的幾個字符智嚷,而不是全部值爹土,以節(jié)約空間并得到好的性能。(http://www.educity.cn/wenda/402373.html)

不在索引列進行數(shù)學(xué)運算和函數(shù)運算(會導(dǎo)致無法使用索引 => 全表掃描)难述,如where id+1 = 100和id = 100 - 1萤晴,效率差很遠(yuǎn)

自增列或全局ID做INNODB的主鍵

盡量不用外鍵(由程序保證約束),高并發(fā)的時候容易死鎖

SQL

SQL語句盡可能簡單胁后,因為一條SQL只能在一個CPU運算店读,在高并發(fā)的情況下,可能一條大SQL就把整個數(shù)據(jù)庫堵死攀芯。而簡單的SQL緩存命中率更高屯断,減少鎖表的時間(特別是MyISAM),用上多CPU

保持事務(wù)、DB連接足夠短殖演,即開即用氧秘、用完就關(guān)。與事務(wù)無關(guān)操作放到事務(wù)外面趴久,減少鎖資源的占用敏储;在不破壞一致性前提下,使用多個短事務(wù)代替長事務(wù)(如:發(fā)帖時的圖片上傳等待)

盡可能少用存儲過程朋鞍,少用觸發(fā)器已添,減用MySQL函數(shù)對結(jié)果進行處理(交由客戶端程序負(fù)責(zé))

盡量少用select *,只取需要數(shù)據(jù)列滥酥,為使用覆蓋索引提供可能性更舞,減少臨時表生成,更安全

用in()代替or坎吻,因為or的效率是O(n)缆蝉,而in()的效率是O(Log n)。如:where a = 1 OR a = 100與where a IN (1, 100)

merge index往往很弱智瘦真,所以用union代替對多字段的or查詢刊头。如:select * from t where a = 1 OR b = 2與select * from t where a = 1 UNION select * from t where b = 2

盡量避免負(fù)向查找,如NOT诸尽、!=等

盡量避免%前綴模糊查詢原杂,由于使用的是B+ Tree,前綴模糊使用不了索引您机,導(dǎo)致全表掃描(后綴模糊速度相對快很多)

減少COUNT(*)穿肄,使用COUNT(col),前者資源開銷大际看,盡量少用咸产。MyISAM不帶WHERE COUNT()而INNODB帶WHERE COUNT()。 計數(shù)的統(tǒng)計可以采用的方法:實時統(tǒng)計可以使用memcache仲闽,雙向更新脑溢,凌晨跑基準(zhǔn);非實時統(tǒng)計盡量用單獨統(tǒng)計表赖欣,定期重算

LIMIT高效分頁:傳統(tǒng)的方法是select * from t limit 10000, 10屑彻,推薦的方法是select * from t where id > 23423 limit 10。LIMIT的偏移量越大則越慢畏鼓。還有一些高效的方法有:先取id來LIMIT偏移酱酬,減少整體的數(shù)據(jù)偏移;取到需要的id云矫,與原表JOIN膳沽;程序取ID,然后用IN來填寫。select * from t where id >= (select id from t limit 10000, 1) limit 10,select * from t INNER JOIN (select id from t limit 10000, 10) USING (id),select id from t limit 10000, 10; select * from t where id in (123, 456...)

若無需對結(jié)果進行去重挑社,則用UNION ALL而非UNION(UNION有去重開銷)

分解JOIN聯(lián)接來保證高并發(fā)陨界。高并發(fā)DB不建議進行兩個表以上的JOIN

group by會默認(rèn)自動升序排序,如果需要去掉排序痛阻,需要指定order by NULL

比較原則:數(shù)字對數(shù)字菌瘪、字符對字符。如果數(shù)值列與字符類型作比較阱当,同時轉(zhuǎn)換成雙精度俏扩;如果字符列與數(shù)值類型作比較,字符列整列轉(zhuǎn)數(shù)值弊添,且不會使用索引查詢

load data導(dǎo)入數(shù)據(jù)比insert快約20倍(不需要刷新緩存)

盡量不使用insert...select(延遲录淡、同步出錯)

大批量更新凌晨操作,避開高峰

SQL的一些命令:explain, show profile, mysqlsla, mysqldumpslow, show slow log, show processlist, show QUERY_RESPONSE_TIME(Percona)

約定

數(shù)據(jù)庫在不同時期使用不同的:實時數(shù)據(jù)用real庫油坝,模擬環(huán)境用sim庫嫉戚,測試用qa庫,開發(fā)用dev庫

禁止未經(jīng)DBA確認(rèn)的子查詢(大部分情況優(yōu)化較差澈圈,特別是WHERE中使用IN id的子查詢彬檀,一般可以用JOIN改寫)

不要在程序上加鎖數(shù)據(jù)庫,因為外部鎖對數(shù)據(jù)庫不可控瞬女,高并發(fā)時是災(zāi)難窍帝,并且極難調(diào)試排查(可以采用事務(wù)來解決)

統(tǒng)一字符集:UTF-8,校對規(guī)則:utf8_general_ci

庫和表的名稱統(tǒng)一用小寫(大小寫敏感拆魏、且不同操作系統(tǒng)都有不同的限制)盯桦;字段名大小寫不敏感;索引名默認(rèn)為idx_字段名渤刃;庫名用縮寫,盡量在2~7個字母贴膘;避免用保留字命名

作者:TyrusChin

鏈接:http://www.reibang.com/p/cf620ad5e8f4

來源:簡書

著作權(quán)歸作者所有卖子。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處刑峡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洋闽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子突梦,更是在濱河造成了極大的恐慌诫舅,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宫患,死亡現(xiàn)場離奇詭異刊懈,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門虚汛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匾浪,“玉大人,你說我怎么就攤上這事卷哩〉氨玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵将谊,是天一觀的道長冷溶。 經(jīng)常有香客問我,道長尊浓,這世上最難降的妖魔是什么逞频? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮眠砾,結(jié)果婚禮上虏劲,老公的妹妹穿的比我還像新娘。我一直安慰自己褒颈,他們只是感情好柒巫,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谷丸,像睡著了一般堡掏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刨疼,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天泉唁,我揣著相機與錄音,去河邊找鬼揩慕。 笑死亭畜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的迎卤。 我是一名探鬼主播拴鸵,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜗搔!你這毒婦竟也來了劲藐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤樟凄,失蹤者是張志新(化名)和其女友劉穎聘芜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缝龄,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡汰现,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年挂谍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片服鹅。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡凳兵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出企软,到底是詐尸還是另有隱情庐扫,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布仗哨,位于F島的核電站形庭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏厌漂。R本人自食惡果不足惜萨醒,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苇倡。 院中可真熱鬧富纸,春花似錦、人聲如沸旨椒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽综慎。三九已至涣仿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間示惊,已是汗流浹背好港。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留米罚,地道東北人钧汹。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像录择,于是被迫代替她去往敵國和親崭孤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,232評論 0 7
  • 什么是SQL數(shù)據(jù)庫: SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫糊肠。SQL是...
    西貝巴巴閱讀 1,817評論 0 10
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法遗锣,內(nèi)部類的語法货裹,繼承相關(guān)的語法,異常的語法精偿,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx閱讀 8,328評論 0 16
  • 2015年 9月26日弧圆,我和小懿開始了我們第二次旅行赋兵,短暫的京郊一日游—喇叭溝原始森林公園。 喇叭溝門自然保區(qū)...
    王樹菲閱讀 448評論 0 1