MySQL的SQL語句最佳化一例
今天在系統上看到一條sql執行時間達到9秒,不符合規範要求,最佳化之~~
sql如下:sql強制用了into_time索引
-
# Time: 2017-02-14T11:35:01.594499+08:00
-
# User@Host: oms_readonly[oms_readonly] @ [10.44.xxx.xxx] Id: 41636892
-
# Query_time: 9.299612 Lock_time: 0.000124 Rows_sent: 20 Rows_examined: 2439330
-
SET timestamp=1487043301;
- select * from customers force index(`into_time`) where `type` = 1 AND `status` < 7 AND `isarea` = 8 AND `into_time`<='2017-01-31 23:59:59' order by score desc limit 0,20;
-
mysql> show table status like 'customers' \G;
-
*************************** 1. row ***************************
-
Name: customers
-
Engine: InnoDB
-
Version: 10
-
Row_format: Dynamic
-
Rows: 2504609
-
Avg_row_length: 710
-
Data_length: 1780383744
-
Max_data_length: 0
-
Index_length: 1253048320
-
Data_free: 6291456
-
Auto_increment: 2546101
-
Create_time: 2017-01-07 01:59:34
-
Update_time: 2017-02-14 13:58:17
-
Check_time: NULL
-
Collation: utf8_general_ci
-
Checksum: NULL
-
Create_options:
-
Comment:
- 1 row in set (0.00 sec)
-
mysql> select count(*) from customers where `into_time`<='2017-01-31 23:59:59';
-
+----------+
-
| count(*) |
-
+----------+
-
| 2439147 |
-
+----------+
- 1 row in set (0.95 sec)
顯然into_time這個列的索引已經不合適了,檢視下錶上都有那些索引
-
Create Table: CREATE TABLE `customers` (
-
`id` int(11) NOT NULL AUTO_INCREMENT,
-
PRIMARY KEY (`id`),
-
KEY `newdata` (`newdata`),
-
KEY `cusname` (`cusname`),
-
KEY `type` (`type`,`ownerid`),
-
KEY `operator` (`operator`),
-
KEY `into_time` (`into_time`),
-
KEY `isarea` (`isarea`),
-
KEY `linkcase` (`linkcase`),
-
KEY `score` (`score`),
-
FULLTEXT KEY `fdx_cusname` (`cusname_idx`)
-
) ENGINE=InnoDB AUTO_INCREMENT=2546101 DEFAULT CHARSET=utf8
- 1 row in set (0.00 sec)
-
-
mysql> explain select * from customers where `type` = 1 AND `status` < 7 AND `isarea` = 8 AND `into_time`<='2017-01-31 23:59:59' order by score desc limit 0,20;
-
+----+-------------+-----------+------------+-------+-----------------------------------------------------------------+-------+---------+------+------+----------+-------------+
-
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
-
+----+-------------+-----------+------------+-------+-----------------------------------------------------------------+-------+---------+------+------+----------+-------------+
-
| 1 | SIMPLE | customers | NULL | index | type,into_time,isarea,status,idx_isarea_renew_owner,type_status | score | 2 | NULL | 270 | 0.92 | Using where |
-
+----+-------------+-----------+------------+-------+-----------------------------------------------------------------+-------+---------+------+------+----------+-------------+
- 1 row in set, 1 warning (0.00 sec)
-
mysql> explain select * from customers where `type` = 1 AND `status` < 7 AND `isarea` = 8 AND `into_time`<='2017-01-31 23:59:59' order by score desc limit 0,20;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20893244/viewspace-2133512/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL語句最佳化SQL
- 【MySQL】MySQL語句最佳化MySql
- MySQL中常用的SQL語句MySql
- MYSQL SQL語句優化MySql優化
- mysql 語句如何最佳化MySql
- mysql的sql語句執行流程MySql
- MySql和簡單的sql語句MySql
- mysql 常用sql語句 簡介MySql
- MySQL之SQL語句優化MySql優化
- MySQL基本sql語句總結MySql
- mysql查詢效率慢的SQL語句MySql
- MySQL入門---(一)SQL的DDL語句MySql
- 資料庫最佳化技巧 - SQL語句最佳化資料庫SQL
- MySQL指南之SQL語句基礎MySql
- mysql執行sql語句過程MySql
- MySql常用操作SQL語句彙總MySql
- MySQL join語句怎麼最佳化?MySql
- 在mysql查詢效率慢的SQL語句MySql
- MySQL 記錄所有執行了的 sql 語句MySql
- MYSQL---SQL語句的資料快取MySql快取
- MySQL的一些常用的SQL語句整理MySql
- SQL最佳化案例-單表分頁語句的最佳化(八)SQL
- Linux-MySQL基本命令-SQL語句LinuxMySql
- MySQL cron定時執行SQL語句MySql
- 1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句資料庫MySql
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句SQL
- SQL語句IN的用法SQL
- MySQL的語句MySql
- MySQL Order by 語句用法與最佳化詳解MySql
- 一條SQL語句在MySQL中如何執行的MySql
- mysql sql語句執行超時設定MySql
- 50個SQL語句(MySQL版) 問題十四MySql
- MySQL查詢語句過程和EXPLAIN語句的基本概念及其最佳化MySqlAI
- MySQL 52個SQL效能優化策略SQL語句彙總MySql優化
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- 第45期:一條 SQL 語句最佳化的基本思路SQL