NULL columns require additional space in the rowto record whether their values are NULL. For MyISAM tables, each NULL columntakes one bit extra, rounded up to the nearest byte.
null值會占用更多的字節(jié),且會在程序中造成很多與預(yù)期不符的情況.
很多表都包含可為NULL(空值)的列,即使應(yīng)用程序并不需要保存NULL 也是如此,這是因為可為NULL 是列的默認(rèn)屬性 。通常情況下最好指定列為NOT NULL, 除非真的需要存儲NULL 值 。如果查詢中包含可為NULL 的列,對MySQL來說更難優(yōu)化,因為可為NULL 的列 使得索引、 索引統(tǒng)計和值比較都更復(fù)雜 。可為 N ULL的列會使用更多的存儲空間,在MySQL里也需要特殊處理 。當(dāng)可為NULL的列被索引時,每個索引記錄需要一個額 外的字節(jié),在MyISAM 里甚至還可能導(dǎo)致固定大小的索引(例如只有一個整數(shù)列的索引)變成可變大小的索引 。通常把可為NULL 的列改為NOT NULL 帶來的性能提升比較小,所以(調(diào)優(yōu)時)沒有 必要首先在現(xiàn)有schema中查找井修改掉這種情況,除非確定這會導(dǎo)致問題 。但是,如果計劃在列上建索引,就應(yīng)該盡扯避免設(shè)計成可為 NULL 的列 。當(dāng)然也有例外,例如值得一提的是,lnnoDB 使用單獨的位 (bit) 存儲NULL 值,所以對于稀疏數(shù)據(jù) 有很好的空間效率 。但這一點不適用千MyISAM 。26.varchar(10)和int(10)代表什么含義varchar的10代表了申請的空間長度,也是可以存儲的數(shù)據(jù)的最大長度,而int的10只是代表了展示的長度,不足10位以0填充.也就是說,int(1)和int(10)所能存儲的數(shù)字大小以及占用的空間都是相同的,只是在展示時按照長度展示 。
27.視圖是什么?對比普通表優(yōu)勢?視圖(View)是一種虛擬存在的表,對于使用視圖的用戶來說基本上是透明的 。視圖并 不在數(shù)據(jù)庫中實際存在,行和列數(shù)據(jù)來自定義視圖的查詢中使用的表,并且是在使用視圖時 動態(tài)生成的 。
視圖相對于普通的表的優(yōu)勢主要包括以下幾項 。
簡單:使用視圖的用戶完全不需要關(guān)心后面對應(yīng)的表的結(jié)構(gòu)、關(guān)聯(lián)條件和篩選條件,對用戶來說已經(jīng)是過濾好的復(fù)合條件的結(jié)果集 。安全:使用視圖的用戶只能訪問他們被允許查詢的結(jié)果集,對表的權(quán)限管理并不能 限制到某個行某個列,但是通過視圖就可以簡單的實現(xiàn) 。數(shù)據(jù)獨立:一旦視圖的結(jié)構(gòu)確定了,可以屏蔽表結(jié)構(gòu)變化對用戶的影響,源表增加 列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對訪問 者的影響 。28.coun()在不同引擎的實現(xiàn)方式?count()的實現(xiàn)方式:在不同的MySQL引擎中,count()實現(xiàn)的方式不同 ?!?MyISAM引擎中把一個表的總行數(shù)直接存在了磁盤上,執(zhí)行count() 的時候直接返回這個數(shù),效率很高;(不支持事務(wù))· 而InnoDB引擎,執(zhí)行count()的時候,需要把數(shù)據(jù)一行一行的從引擎讀出來,然后累計計數(shù);(因為MVCC的實現(xiàn),應(yīng)該返回多少行是不確定的(自己能讀到自己事務(wù)的未提交記錄,而不能讀到別人事務(wù)的未提交記錄))
但是InnoDB在執(zhí)行count()是做了優(yōu)化的 。InnoDB是索引組織表,主鍵索引樹的葉子節(jié)點是數(shù)據(jù),而普通索引樹的葉子節(jié)點是主鍵值 。所以,普通索引樹比主鍵索引樹小很多 。對于count()這個操作,遍歷哪個索引樹得到的結(jié)果邏輯上是一樣的,所以MySQL優(yōu)化器會選擇最小的那棵樹來遍歷 。在保證邏輯正確的前提下,盡量減少掃描的數(shù)據(jù)量,是數(shù)據(jù)庫系統(tǒng)設(shè)計的通用法則之一 。
count(* )返回的結(jié)果集,一行行的判斷,如果count函數(shù)的參數(shù)不是NULL,累計值就加1,最后返回累加值 。server層要什么,InnoDB就返回什么 。(就是SQL語句要什么字段,InnoDB就返回什么字段)count(字段) 則表示返回滿足條件的數(shù)據(jù)行里面,字段值不為NULL的總個數(shù) 。1.如果字段定義為not null的話,一行行的從記錄里面讀出這個字段,判斷不能為null,按行累加;2.如果字段定義允許為null,執(zhí)行的時候判斷到有可能是null,還要把值取出來再判斷一下,不是null才累加 。count(主鍵id): InnoDB引擎會遍歷整張表,把每一行的id取出來,返回給server層 。server層拿到id后,判斷是不可能為空的,就按行累加 。count(1): InnoDB引擎會遍歷整張表,但不取值 。server層對于返回的每一行,放一個數(shù)字”1″進(jìn)去,判斷是不可能為空的,按行累加 。結(jié)果: count(*)≈count(1)>count(主鍵id)>count(字段) 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 武漢長江大橋漢陽橋頭電梯開了嗎2021
- 成都有山姆超市嗎
- 2021拼搏勵志語錄(關(guān)于2021拼搏勵志語錄
- 京東2021雙十一活動幾號開始幾號結(jié)束
- 2021肯德基萬圣節(jié)海綿寶寶玩具有幾款
- 2021年春分是幾月幾日 春分是立春嗎
- 2021年全國取消禁摩令 摩托車京a牌照多少錢
- 健身教練證怎么考 樂刻健身教練培訓(xùn)多少錢
- 2021單人玩職業(yè)推薦 暗黑3攻略心得
- 考試成績猜一個數(shù)學(xué)名詞 成績是多少打一數(shù)字
