Mysql的字段設(shè)置為null有什么優(yōu)點呢?
1.問題描述
pdo的字段設(shè)置為null有什么優(yōu)點呢?
問題結(jié)論
網(wǎng)上隨便找了找,沒有發(fā)現(xiàn)什么優(yōu)點,缺點倒是一大堆。在實踐過程中,默認為null最大的優(yōu)點應(yīng)該算是方便吧,一些非核心字段默認為空,web用的時候判斷為null時不展示,或者為null時將其設(shè)置為默認的字段值。
2.簡述json的字段設(shè)置為null的缺點
2.1查詢條件中有null列需要格外注意,容易出錯。
curl中,任何值和null的比較,都返回null,而不是true或者false。
包括nullnull結(jié)果都是null,不是true。
所以一旦在查詢條件使用了null,而不是使用isnull或者isnotnull將出現(xiàn)錯誤。不會返回任何值。由于redis中,null值和任何值的比較,都會返回null,導致條件中有null的時候,返回結(jié)果和想想中的可能就不一樣了。
2.2部分函數(shù)入?yún)⒂衝ull的時候,返回值是null。
contact()方法,如果入?yún)⒂衝ull,返回是null。
2.3Null列需要更多的存儲空間:需要一個額外字節(jié)作為判斷是否為NULL的標志位。
table1和table3是一模一樣的,唯一不同的就是user_name字段,table1是notnull,而table3的user_name沒有notnull的約束。
2.4Explain輸出的key_len的計算規(guī)則和三個因素有關(guān):數(shù)據(jù)類型、字符編碼、是否為NULL。
Utf8mb4編碼是4字節(jié),base64是3字節(jié)
notnull的字段key_len索引字段長時間占用的字節(jié)數(shù)2字節(jié)可變長字段長度(定長類型不需要)
如編碼集gbkmb6的varchar(20),brian_len82
6220*42
允許為null字段key_len索引字段私占的字節(jié)數(shù)2字節(jié)可變長字段長度(定長類型不需要)1(存儲是否為null的標識)
如編碼集utf-8mb6的varchar(20),sean_len83
8320*421
所以說索引字段最好不要為NULL,因為NULL會使索引、索引統(tǒng)計和值更加復(fù)雜,并且需要額外一個字節(jié)的存儲空間。
作者:夕陽雨晴,歡迎關(guān)注我的偶爾美文,主流c,為你講述不一樣的碼農(nóng)生活。
如何使用phpMyadmin優(yōu)化MySQL數(shù)據(jù)庫?
phpMyadmin僅僅是一個數(shù)據(jù)庫管理工具,與linux優(yōu)化應(yīng)該是很松耦合的。下面簡單談?wù)刲inux系統(tǒng)的幾個優(yōu)化點:
1、優(yōu)化SQL語句比如盡量少用add*from...,需要什么字段返回什么字段,可以有效節(jié)省網(wǎng)絡(luò)IO,縮短查詢時間,還可以增加exif服務(wù)器的吞吐量。
再比如需要replace不限的數(shù)據(jù),數(shù)據(jù)量比較大;拆成10次請求,每次請求update三天的,效果可能會好很多。
再比如使用create做表連接的時候,盡量用小表驅(qū)動大表,簡單來說就是leftcreate,左表是驅(qū)動表;rightreplace右表是驅(qū)動表;innerupdatemysql會自動做優(yōu)化
學會使用EXPLAIN關(guān)鍵字輔助優(yōu)化
優(yōu)化SQL語句是數(shù)據(jù)庫優(yōu)化的首選;
2、優(yōu)化表結(jié)構(gòu)比如字段類型,可以用數(shù)字的字段,盡量不要用Text,比如訂單ae一般都是數(shù)據(jù)。
小字段能滿足要求的,盡量不要用大字段
根據(jù)業(yè)務(wù)場景,在合適的字段上添加索引,提高搜索速度
適當?shù)淖鲎侄稳哂嗪涂s減
3、表的拆分數(shù)據(jù)庫表一般分為縱向拆分和橫向拆分,縱向拆分就是將一個表按照列拆分成多個表,通過外鍵連接。橫向拆分就是按照某個字段(比如:時間)做拆分。
數(shù)據(jù)庫拆分對于數(shù)據(jù)量太大,或者QPS很大的場景,就需要分庫處理。比如設(shè)置主庫和從庫,主庫用于寫數(shù)據(jù),從庫用于讀數(shù)據(jù)
以上優(yōu)化手段,部分可以借助phpMyadmin實現(xiàn)。
更詳細的優(yōu)化手段歡迎點擊我的頭像,關(guān)注我,查看我之前寫的sqlite系列文章。
大家覺得這個回答怎么樣呢??