MySQL Index Condition Pushdown(ICP)性能優化方法實例(2)_MySQL教程
推薦: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 關閉時 ,僅僅使用索引作為訪問數據的方式。
ICP 開啟時 ,MySQL將在存儲引擎層 利用索引過濾數據,減少不必要的回表,注意 虛線的using where 表示如果where條件中含有沒有被索引的字段,則還是要經過MySQL Server 層過濾。
四 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-
- 防止服務器宕機時MySQL數據丟失的幾種方案
- MySQL Semisynchronous Replication介紹
- MySQL延遲關聯性能優化方法
- MySQL 5.7增強版Semisync Replication性能優化
- MySQL order by性能優化方法實例
- MySQL slave_net_timeout參數解決的一個集群問題案例
- 使用innodb_force_recovery解決MySQL崩潰無法重啟問題
- MySQL replace into 語句淺析(二)
- MySQL replace into 語句淺析(一)
- MySQL定期自動刪除表
- MySQL中的CONCAT函數使用教程
- MySQL中的RAND()函數使用詳解
- 相關鏈接:
- 教程說明:
MySQL教程-MySQL Index Condition Pushdown(ICP)性能優化方法實例(2)。