熬夜布禿頭啊 2021-09-20 02:23:07 阅读数:241
·?所謂得反範式化就是為了性能和讀取效率得考慮而適當得對數據庫設計範式得要求進行違反
·?允許存在少量的冗餘,換句話來說反範式化就是使用空間來換取時間
舉一個簡單的例子:
上面這個sql語句查詢的數據來自a,b兩張錶,仔細看你會發現,其中只有cl4這一列是出自b錶,其他的所有都是a錶,這樣可以考慮建立一個c錶,把c1l,cl2,cl3,cl4的數據全部關聯起來,實際做的事情就是冗餘了cl4這個字段。
帶來的好處呢??查詢的時候只要查詢c錶,效率不會提昇才怪。
數據類型必須一致
數據類型必須一致,請完全遵守,如果你定是要尋根究底轉牛角尖,那我們做個實驗,做實驗的前提是你要了解些許的執行計劃,當然對索引也得一知半解才行。
數據和錶都准備好了後,我來寫一個sql語句:
很棒,結果也查詢出來了,name是varchar類型, 而給出的2000是整型,這有什麼問題嗎?結果不是正確的嘛?
別著急,還記得前面創建了索引嘛?
使用執行計劃看下:
看出問題了嗎?雖然我指定的name上面是索引的,但數據類型不一致,不好意思,結果是全錶掃描。
如果數據類型一致呢?
key有值,代錶就是用到了索引,so,不需要再鑽牛角尖了吧!
保證被關聯的字段需要有索引
這句話很好理解吧,如果t1,t2錶,如sql語句:
你可能會問straight_join是什麼??他和join有什麼區別呢?
好吧,你既然問到了,我就還是說下,如果你使用join,Mysql優化器可能會選擇t1或者t2來作為驅動錶,而我使用的是straight_join,那麼關系很明確了,t1是驅動錶,那t2就是被驅動錶。
既然語句知道被驅動錶了,那被關聯的字段就是t2.a,按照規範的要求,必須在t2錶的a列上必須創建有索引。
最後還准備了一套上面資料對應的面試題(有答案哦)和面試時的高頻面試算法題(如果面試准備時間不够,那麼集中把這些算法題做完即可,命中率高達85%+)
版权声明:本文为[熬夜布禿頭啊]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210920022306549q.html