MySQL Index Condition Pushdown(ICP)性能優化方法實例(2)_MySQL教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:MySQL order by性能優化方法實例
      這篇文章主要介紹了MySQL order by性能優化方法實例,本文講解了MySQL中order by的原理和優化order by的三種方法,需要的朋友可以參考下 前言 工作過程中,各種業務需求在訪問數據庫的時候要求有order by排序。有時候不必要的或者不合理的排序操作很可能導致數據庫系統崩

        開啟ICP 時,last_name 的like '%sig'條件可以通過索引字段last_name 進行過濾,在存儲引擎內部通過與where條件的對比,直接過濾掉不符合條件的數據。該過程不回表,只訪問符合條件的1條記錄并返回給MySQL Server ,有效的減少了io訪問和各層之間的交互。

        ICP 關閉時 ,僅僅使用索引作為訪問數據的方式。

      MySQL Index Condition Pushdown(ICP)性能優化方法實例

        ICP 開啟時 ,MySQL將在存儲引擎層 利用索引過濾數據,減少不必要的回表,注意 虛線的using where 表示如果where條件中含有沒有被索引的字段,則還是要經過MySQL Server 層過濾。

      MySQL Index Condition Pushdown(ICP)性能優化方法實例

        四 ICP的使用限制

        1 當sql需要全表訪問時,ICP的優化策略可用于range, ref, eq_ref, ref_or_null 類型的訪問數據方法 。

        2 支持InnoDB和MyISAM表。

        3 ICP只能用于二級索引,不能用于主索引。

        4 并非全部where條件都可以用ICP篩選。

        如果where條件的字段不在索引列中,還是要讀取整表的記錄到server端做where過濾。

        5 ICP的加速效果取決于在存儲引擎內通過ICP篩選掉的數據的比例。

        6 5.6 版本的不支持分表的ICP 功能,5.7 版本的開始支持。

        7 當sql 使用覆蓋索引時,不支持ICP 優化方法。

         代碼如下:

        mysql> explain select * from employees where first_name='Anneke' and last_name='Porenta' ;

        +----+-------------+-----------+------+---------------+--------------+---------+-------------+------+-----------------------+

        | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

        +----+-------------+-----------+------+---------------+--------------+---------+-------------+------+-----------------------+

        | 1 | SIMPLE | employees | ref | idx_emp_fnln | idx_emp_fnln | 94 | const,const | 1 | Using index condition |

        +----+-------------+-----------+------+---------------+--------------+---------+-------------+------+-----------------------+

        1 row in set (0.00 sec)

        mysql> explain select first_name,last_name from employees where first_name='Anneke' and last_name='Porenta' ;

        +----+-------------+-----------+------+---------------+--------------+---------+-------------+------+--------------------------+

        | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

        +----+-------------+-----------+------+---------------+--------------+---------+-------------+------+--------------------------+

        | 1 | SIMPLE | employees | ref | idx_emp_fnln | idx_emp_fnln | 94 | const,const | 1 | Using where; Using index |

        +----+-------------+-----------+------+---------------+--------------+---------+-------------+------+--------------------------+

        1 row in set (0.00 sec)

      分享:MySQL slave_net_timeout參數解決的一個集群問題案例
      這篇文章主要介紹了MySQL slave_net_timeout參數解決的一個集群問題案例,問題日志請見正文,本文使用slave_net_timeout參數解決了這個問題,需要的朋友可以參考下 【背景】 對一套數據庫集群進行5.5升級到5.6之后,alter.log 報warning異常。 復制代碼 代碼如下: 2015-02-

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:MySQL教程/更新時間:2015-05-30
      相關MySQL教程