mysql資料庫優化
php學習過程中或者面試過程中少不了的乙個重要知識點,那就是關於資料庫的優化問題,本人經過查閱資料並驗證,總結了幾點比較淺層的資料庫優化方法,小白可以參考,大神勿噴。
忘了什麼時候發現的一張關於mysql資料庫優化的梯形圖了,一直收藏著,感覺很有道理:
從圖中可以很明顯的看出mysql資料庫優化的常用方法以及成本的高低。sql語句的優化和索引的優化是成本最小但是效果最好的方法,關於這兩點我總結了如下幾個優化方法:
1.sql語句中不使用子查詢,比如delete from user where uid not in( select id from order),因為使用子查詢資料庫要在記憶體中建立臨時表,消耗資源,如果兩個表有關聯並且經常被一塊呼叫,最好是在一張表中建立另一張表的外來鍵用join語句查詢,比如:delete from user left join order on user.id=order.uid;
2.sql語句中最好不要出現*來代替已知字段,即使是要查詢所有欄位也要寫出每乙個字段,因為用*代替字段資料庫要先查詢出表中有哪些欄位再進行sql語句的查詢,無形中又多了一次無意義的查詢工作;
3.建立索引
3.1索引可以非常大程度加快資料庫檢索速度,尤其是在where和join中出現的列或者用order by排序的時候速度更是快很多(需要判斷或者比較或者排序的時候);
3.2索引大類分為聚簇索引和非聚簇索引兩種,聚簇索引是按照資料存放的物理位置為順序的,而非聚簇 索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快;
3.3但是建立索引並不是越多越好,過多索引會造成冗餘,因為每一次delete、update、add都會重新整理一次索引,過多索引造成其他操作消耗過多資源,過小的表也沒必要建立索引,沒人見過兩頁的宣傳單頁還有目錄的對吧。
第二重要的就是表結構優化,關於這方面也有以下幾點簡單總結:
2.將常用資訊和不常用資訊分表儲存,比如乙個****的使用者表,使用者的暱稱,頭像,密碼,賬號這類字段使用者登入就會用到,而使用者的興趣愛好了,喜歡的顏色了這種欄位就分表儲存,相信大家京東賬號中的個人資訊可能也就在註冊的時候開啟過,以後就再沒注意過了吧。
其它關於分庫分表,負載均衡了集群和分布式了本小白還沒接觸過,需要的同學查閱其它資料哈!
面試題 資料庫優化
從以下方面去考慮 建立並使用盡量索引,以及避免全表掃瞄 索引是什麼 索引分類 between and 代替in exists 代替in union代替in where子句將過濾大量資料的條件放靠後 避免where子句中使用is not null is null 函式運輸 算術運算 等判斷 2 程式語...
php經典面試題
functiongbk strrev str if ord char 127 elseelseif ord first b 192 elseelseelseif ord first b 192 elseelseelsereturn arr arr array 12,78,49,68,59,67,93...
面試題 資料庫優化的方法
話不多說,先上結論 一 表的設計合理化,符合三大正規化 3nf 二 新增適當索引 index 四種 普通索引 主鍵索引 唯一索引unique 全文索引 三 查詢語句的優化 四 資料庫的分庫分表 五 使用儲存過程 模組化程式設計,可以提高速度 六 資料庫硬體公升級 七 使用快取機制 資料庫滿足資料庫的...