SQL最佳化

coderlwz發表於2024-09-29

企業業務邏輯資料的遞增和使用者量的遞增會產生大量的資料庫資料量過大的問題。資料庫的預設索引表都是存在。一個資料庫有索引庫和data資料庫。索引庫裡面存放著索引表,指向資料儲存區。Java適配的MySQL資料庫預設提供每張資料記錄表的索引表機制。資料庫表的資料索引預設是會查詢索引表之後再去資料記錄表中查詢資料。

資料庫的最左匹配原則預設透過字母表排序匹配查詢資料,最左匹配原則是有序查詢。資料量過大會產生大量的慢查詢語句。專業術語回表查詢是對資料記錄表的索引返回到資料索引表。大量的資料記錄表的慢查詢操作會損失資料庫資料查詢效能。SQL的編寫儘量使用索引庫查詢。索引庫查詢是小表查詢操作,耗費的查詢資料效能時間較少。索引失效是由like模糊匹配所產生的查詢效能問題。like 查詢是全表掃描操作,全表掃描關聯的資料量過大的時候會產生資料查詢時間過長。

二叉樹索引的增強版本B+樹實現對索引的樹形結構儲存。樹形結構儲存資料庫的索引比線性陣列儲存效能要好。索引類似指標,聯合索引是索引物件,由很多的索引組合而成。資料庫索引表的管理操作十分複雜。索引庫索引庫的大小不能過大,過大也需要做分散式處理。SQL的編寫過程涉及到的子查詢不能巢狀太多,子查詢會在執行記憶體中給資料輸出物件分配記憶體空間。巢狀分配記憶體不利於記憶體空間的釋放。

表與表之間的關聯關係建立透過外來鍵和主表的主鍵進行關聯。關係型資料庫的約束過大不太靈活。結構化和非結構化的資料庫的區別在於對資料的規範化儲存。結構化資料儲存比較耗費記憶體,一張資料表是否有資料存在都會有標記存在佔用一定記憶體空間。非結構化的資料庫是非關係型資料庫,非關係型的資料庫使用api運算元據。Memochache和redis都是非關係型的資料庫,資料庫資料記錄存在就會有資料結構分配儲存,沒有資料的欄位並不會結構化儲存。

SQL的資料輸出資料區儘量使用簡單的資料。聚集函式在SQL的輸出資料區存在會生成資料輸出集合,類似複雜資料物件不利於資料的檢索。聚集函式輸出資料會產生索引失效,需要重新對輸出資料建立索引。SQL的條件過濾is null 是不會掃描索引表。節省資料索引表的記憶體空間。條件or關鍵字儘量少用,也是不會和資料索引表產生關聯。資料表的小表類似索引表,大表類似資料庫記錄表。小錶帶動大表,可以提高資料查詢效能。

相關文章