int:函數
select pow(2,31) - 1 有符號最大值優化
select pow(2,32) 無符號,最大值設計
select pow(2,31) 負數最大值orm
int 無符號最大42億 也就夠用來 作主鍵了。(天天寫入不超過100萬就沒事)blog
天天寫100萬,能寫10年。索引
DB:table(字段,索引),存儲過程,觸發器,事件,視圖(表就是視圖)事件
decimal 會轉成浮點數進行運算,會出現四捨五入狀況。(能夠考慮存成int 單位爲分)圖片
前面整個字節長度,後面是 小數點佔用的位數。ci
decimal(10,0)佔用10個字節==int(10)佔用4個字節,不要犯這種錯。rem
bit bit(M) #m用於表示,有多少個二進制位(0101),M能夠支持0-64位,varbinary能夠存儲更多(select 不到,程序可讀)。
int(4) 不是容許存4位,只是顯示寬度。
int(4) zerofill 寫入數字5,顯示:0005
int(11) auto_increment 每次自增長1
datetime 佔用4個字節(推薦使用,5.6及之後能夠更新當前時間)
日期轉換:select cast('2017-04-10 14:38:14.0697' as date);,select now()+0
5.6新增兩個函數能夠打印出毫秒:
select now(4),select microsecond(now(4));
char(10),存儲1個字符自動補全到10個字符
varchar(10),存儲1個字符就佔一個字符,低於255字節須要1個字節記錄格式信息overhead,大於255字節須要2個字節,。varchar最多存儲65535字節
innodb_file_format #antelope格式可存儲255字節,以後在overflow,barracuda超過20個字節,存儲到其餘page上,設計時把字符列放到最後。由於最小的列在一個page上,更好讀出來。
myisam 索引長度最高1000,innodb索引長度最高767
longblob(binary)沒有字符集校驗,longtext有字符集校驗。
varchar,utf8字符集。最多存儲(65535-2)/8
圖片存儲到binary&blob 等二進制字段裏面,(圖片存儲能夠調用mongo的DFS,百度雲,360雲盤)
文件格式b開頭,varchar 佔用20個字節。
索引列不要使用更新頻繁的列。where 條件索引選擇度,每一個字段加上not null。
超過30%可能不走索引。選擇度30%如下能夠創建索引,控制在10%最好。查詢超過30%通常不建索引。
多列索引(a,b,c)至關於(a),(ab),(abc)
兩表作join,字符類型或字符集不同,面臨類型轉換,索引失效。
select * from tb where i_c1 = and v_c2 (兩個列都是索引,優化器使用哪一個?)實際上選哪一個都不對。SQL:成本優化,RBO:基於規則 rule base opt(誰在前使用誰)。CBO:基於代價 cost base opt。
新版本有index merge,早期也有比較坑。。5.6和5.7好多都在使用RBO,沒有直方圖。