1. 程式人生 > 其它 >判斷運算與邏輯運算通用規則

判斷運算與邏輯運算通用規則

目錄

社招後端21連問(三年工作經驗一面)

mysql優化綜合性

1.表的設計優化

選擇表合適儲存引擎:
myisam: 應用時以讀和插入操作為主,只有少量的更新和刪除,並且對事務的完整性,併發性要求不是很高的。
Innodb: 事務處理,以及併發條件下要求資料的一致性。除了插入和查詢外,包括很多的更新和刪除。
儘量 設計 所有欄位都得有預設值,儘量避免null。


資料庫表設計時候更小的佔磁碟空間儘可能使用更小的整數型別. 
但是一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。    
因此,在建立表的時候,為了獲得更好的效能,我們可以將表中欄位的寬度設得儘可能小。例如,
CHAR[111]       VARCHAR(21321)       text  
在定義郵政編碼這個欄位時,如果將其設定為CHAR(255),顯然給資料庫增加了不必要的空間,
 CHAR (255)            VARCHAR (255)    10 

甚至使用VARCHAR這種型別也是多餘的,因為CHAR(6)就可以很好的完成任務了。同樣的,如果可以的話,

數字型別要比字元型別佔空間小,索引能用數字的儘量用數字的
數字型別的選擇也是儘量選擇小的
我們應該使用TINYINT而不是BIGINT來定義整型欄位。
應該儘量把欄位設定為NOT NULL,這樣在將來執行查詢的時候,資料庫不用去比較NULL值。
對於某些文字欄位,例如“省份”或者“性別”,我們可以將它們定義為ENUM型別。因為在MySQL中,ENUM型別被當作數值型資料來處理, 而數值型資料被處理起來的速度要比文字型別快得多。這樣,我們又可以提高資料庫的效能。

mysql資料庫索引基於什麼資料結構實現的?

B+Tree

為什麼選B+Tree?它和其他資料結構有哪些特點?

每次從磁碟中查詢資料稱為磁碟I/O, 而磁碟IO 至少要經歷磁碟尋道、磁碟旋轉、資料讀取等等操作,非常影響效能,所以對於讀取資料,最大的優化就是減少磁碟I/O

二叉樹:每一個節點只能儲存一個數據,每個資料只有兩個子節點, 樹的高度會很高,高度越高發生磁碟IO的次數越多。

B-Tree:自平衡多叉樹所有子節點高度相同,葉子節點指標為空,每一個索引項下面都儲存資料,B-Tree的節點上即儲存資料指標又儲存資料,節點的資料儲存個數稱為度

根據磁碟預讀原理:每次從磁碟向記憶體讀取資料時,讀取的資料量稱為磁碟塊,塊有固定大小是扇區的整數倍,每次從磁碟上都要讀取大量資料,而二叉樹節點只使用一個數據,其他的資料都浪費掉了,B-Tree的每個節點上可以儲存多個數據,雖然讀取的資料量大了,但是 度 卻小了,樹的高度增加了。

B-Tree與B+Tree的區別:

例如從磁碟一次讀取4000個數據,每個節點是由索引和資料組成,索引地址+資料佔100B,讀一次它的 度 的長度為40,大資料量情況下,度還是不夠。B+Tree是B-Tree的變體,特點是非葉子節點不儲存data,只儲存key,可以增大度;葉子節點不儲存指標;這樣索引地址佔5B,度的長度為800。樹的高度變矮了,磁碟IO次數少了。B+Tree特點順序訪問指標,提高區間訪問能力

還有Hash結構,通過hash值計算將資料儲存到不同的桶當中,通過hash值可以快速找到桶,但是它不支援範圍查詢,查詢單行資料很快,也有可能出現hash衝突,使用的較少

聚簇索引和非聚簇索引的區別?

MyISAM儲存引擎:

MyISAM索引檔案和資料檔案是分離的---非聚簇

InnoDB儲存引擎:

InnoDB資料檔案本身就是索引檔案---聚簇