mysql 查詢優化

2021-07-09 09:54:35 字數 1257 閱讀 1306

1、乙個sql查詢語句是否可以使用乙個表的多個索引?

否,對於乙個表你可以自由建立索引,沒有數量限制,但是使用索引過多會影響資料的更新操作,如update和delete等等,但是查詢的時候,乙個表只能使用乙個索引,如果mysql發現你的查詢語句中使用了多個索引它會通過內部的優化器優化你的sql語句,只使用其中乙個最優的索引。

2、關於組合索引與單獨索引

組合索引是指乙個索引中包含兩個字段例如:  

alter table authz_user_parking_group addindexidx_parking_group_id_user_id (parking_group_id,user_id)

這個索引可以分解為兩個單獨的索引

parking_group_id,user_id

parking_group_id

當乙個查詢語句同時使用到 parking_group_id,user_id 

這兩個欄位時,查詢效率工會高很多,而單獨建立兩個索引時,只有乙個索引會被用到,或者需要在兩個索引中跳來跳去,更加影響效能。所以當乙個表中多個欄位要用到時間,要考慮建立組合索引,另外組合的字段的順序也很重要。

3、mysql 語句like contact('%','','%')不會使用索引,如果為相應的字段建立索引也是徒勞。而前匹配like contact('','','%')則會使用索引,注意如何表字段為int型別時是不會使用索引的,對於int型別要使用等於。

4、強制使用某個索引

當乙個表中有多個字段用到查詢條件中,由於存在多個索引或者查詢條件過於複雜時,可能乙個索引都不會使用到,這時候我們要強制指定乙個索引。例如:

select

pb.user_type,pb.car_code,pb.should_charge_value,pb.act_charge_value,

pb.act_crash_value,

pb.trader_relief_value,pb.park_relief_value,pb.platform_relief_value,pb.owe_money,

pb.top_bill_code,pb.check_in_time,pb.check_out_time,pb.last_update_time 

from parking_bill pb force index (primary)

5、如果有group by 或者 order by 最好以這個排序或者分組的字段作為索引。

6、時間日期使用索引時比較特殊

時間和日期必須在某乙個範圍內 才會使用索引 反之預設為不使用索引

查詢優化(MySQL優化查詢)

關聯查詢太多join 設計缺陷或不得已的需求 資料庫伺服器調優及各個引數設定不適當 緩衝 執行緒數等 慢查詢日誌 找出執行速度慢的sql語句 慢查詢的開啟並捕獲 explain 慢sql分析 show profile查詢sql在mysql伺服器裡面的執行細節和生命週期情況 sql資料庫伺服器的引數調...

mysql統計查詢優化 Mysql查詢優化

效能涉及的層面很多,但是在操作層面,主要有表結構設計優化 索引優化和查詢優化 查詢的生命週期大致可以分為,從客戶端 到服務端 在伺服器上解析 生成執行計畫 執行 返回結果給客戶端 sql執行流程 具體優化技巧 1.消除外連線 2.消除子查詢 盡量用join代替子查詢,雖說mysql查詢優化器會進行優...

MySQL優化 查詢優化

在每乙個消耗大量時間的查詢中,都能看到一些不必要的額外操作 某些操作被額外地重複了很多次 某些操作執行得太慢等。優化查詢的目的就是減少和消除這些操作所花費的時間。查詢效能低下最基本的原因是訪問的資料太多。所以需要考慮是否向資料庫請求了不需要的資料 1 多表關聯時,或獲取單錶資料時,盡量避免不加思考地...