建立更好的索引
1.覆蓋索引,當qep在extra列中顯示using index時,不意味訪問底層資料庫時使用了索引,他代表只有這個索引才是足查詢要求的。這種索引可以為大型查詢或者頻繁執行的查詢帶來顯著的效能提公升,稱為覆蓋索引,故名思義,因為他滿足了查詢中給定表用到的所有列。要建立乙個覆蓋索引,他必須包含指定表上包括where子句,order by子句,group by子句(如果有的話)以及select語句中的所有列
* innodb中主鍵值會附加到非主鍵索引的每乙個對應記錄後邊,因此沒有必要在非主鍵索引中指定主鍵,即innodb引擎中所有非主鍵索引都隱含主鍵列
*盡量不在查詢中使用select *,而只包含真正需要的列,如此就可以通過建立合適的索引來獲取更好的sql優化
*要經常性的根據查詢sql中select來調整索引
*覆蓋索引對於使用很多較小長度的主鍵和外來鍵約束的大型規範化正規化來說是很理想的優化方式
2.區域性索引
主要目標是減少索引占用的空間,更小的索引意味著更小的磁碟i/o開銷,更快的訪問到所需的資料行。尤其
磁碟的索引和資料列遠大於系統可用記憶體時,獲取的效能改進會超過乙個非唯一的並且擁有低基數的索引帶來的影響。
3. explain命令
explain命令用於mysql中sql語句的qep
例如:explain [extended | partitions]
select ...
或explain table_name(等同於desc table_name)
qep實在sql/stored procedure語句執行時動態計算的
MySQL優化(二) 優化SQL語句
2.優化子查詢,派生表和檢視引用 3.優化information schema查詢 4.優化資料變更宣告 5.優化資料庫許可權 6.其他優化技巧 資料庫應用程式的核心邏輯是通過sql語句執行的,無論是直接通過直譯器發出還是通過api在後台提交。查詢以select 語句的形式執行資料庫中的所有查詢操作...
mysql優化之sql優化原則
原則一 選擇需要優化的sql 1 選擇更需要優化的sql 高併發 低消耗的sql。例項 a語句 1小時請求1w次,1次10個io b語句 1小時請求10次,1次1w個io 1 從單位時間產生的io總數來說,相同的 2 針對乙個sql,如果我能把10個io變成7個io,一小時減少3w個io 針對第二個...
MySQL優化 SQL及索引優化(二)
對支付時間建立索引 create index idx paydate on payment payment date 查詢 select max payment date from payment 在一條sql中同時查出2006年和2007年電影的數量 優化count 函式 對count函式使用的列...