1.找出最近50W行慢日志中找出较慢的SQL;
# Query_time: 16.804718 Lock_time: 0.000367 Rows_sent: 10 Rows_examined: 636065 # Query_time: 11.321155 Lock_time: 0.000570 Rows_sent: 1 Rows_examined: 225418 # Query_time: 13.508679 Lock_time: 0.000112 Rows_sent: 1 Rows_examined: 186589
2.SQL1分析
--SQL1:优化:# Query_time: 16.804718 use underwriting; SET timestamp=1705975491; SELECT m.UUID, max( if ( m.RISKCODE like '10%', m.PROPOSALNO, null ) ) as contractNoCi, max( if ( mm.RISKCODE not like '10%', mm.PROPOSALNO, null ) ) as contractNoBi, t.PLATENO as plateNo, t.VEHICLEKINDCODE as vehicleKindCode, h.APPLINAME as applicantName, h.INSUREDNAME as insuredName, h.OPERATORCODE as operatorCode, h.OPERATORNAME as operatorName, h.SYSTEMCODE as systemCode, max( if ( m.RISKCODE like '10%', IFNULL(m.TOTALPREMIUM,0)+IFNULL(m.SUMTAX,0), null ) ) as premiumsCi, max( if ( mm.RISKCODE not like '10%', IFNULL(mm.TOTALPREMIUM,0), null ) ) as premiumsBi, max(IFNULL(m.SUMTAX,0)) as sumTax, max( if ( m.RISKCODE like '10%', m.VALIDDATE, null ) ) as validDateCi, max( if ( m.RISKCODE like '10%', m.EXPIRYDATE, null ) ) as expiryDateCi, max( if ( mm.RISKCODE not like '10%', mm.VALIDDATE, null ) ) as validDateBi, max( if ( mm.RISKCODE not like '10%', mm.EXPIRYDATE, null ) ) as expiryDateBi, max( if ( m.RISKCODE like '10%', m.BUSINESSSTATUS, null ) ) as businessStatusCi, max( if ( mm.RISKCODE not like '10%', mm.BUSINESSSTATUS, null ) ) as currentStatusBi, max( if ( m.RISKCODE like '10%', m.RISKCODE, null ) ) as riskCodeCi, max( if ( mm.RISKCODE not like '10%', mm.RISKCODE, null ) ) as riskCodeBi, if(tt.ATTENTIONID is null,'0','1')as isAttention, tt.ATTENTIONID as attentionId, h.amlterrorFlag as amlterrorFlag, h.AMLTERRORTYPE as amlterrorType, x.fraud as fraud, h.signStatus as signStatus from prpthead h LEFT JOIN prpattention tt ON (h.UUID = tt.UUID and tt.USERCODE='01A00016' and tt.BUSINESSTYPE='T'), prptmain m INNER JOIN prptmain mm on m.UUID = mm.UUID, --m和mm表合并仅访问一次。 prptitemcar t, prptsaleinfo s, prptitemcarext x where h.UUID = m.UUID and h.UUID = t.UUID and h.UUID = s.UUID and s.UUID = x.UUID and h.VALIDSTATUS = '1' AND s.COMCODE LIKE CONCAT('01','%') AND h.ISSUEDATE >='2024-01-17 00:00:00.0' AND h.ISSUEDATE < DATE_ADD('2024-01-23 00:00:00.0',INTERVAL 1 DAY) AND ( s.COMCODE LIKE CONCAT('01','%') --这个条件多写了一次。 ) group by m.UUID ORDER BY h.UPDATETIME desc limit 10; --查看SQL的执行计划。 explain SELECT m.UUID, max( if ( m.RISKCODE like '10%', m.PROPOSALNO, null ) ) as contractNoCi, max( if ( mm.RISKCODE not like '10%', mm.PROPOSALNO, null ) ) as contractNoBi, t.PLATENO as plateNo, t.VEHICLEKINDCODE as vehicleKindCode, h.APPLINAME as applicantName, h.INSUREDNAME as insuredName, h.OPERATORCODE as operatorCode, h.OPERATORNAME as operatorName, h.SYSTEMCODE as systemCode, max( if ( m.RISKCODE like '10%', IFNULL(m.TOTALPREMIUM,0)+IFNULL(m.SUMTAX,0), null ) ) as premiumsCi, max( if ( mm.RISKCODE not like '10%', IFNULL(mm.TOTALPREMIUM,0), null ) ) as premiumsBi, max(IFNULL(m.SUMTAX,0)) as sumTax, max( if ( m.RISKCODE like '10%', m.VALIDDATE, null ) ) as validDateCi, max( if ( m.RISKCODE like '10%', m.EXPIRYDATE, null ) ) as expiryDateCi, max( if ( mm.RISKCODE not like '10%', mm.VALIDDATE, null ) ) as validDateBi, max( if ( mm.RISKCODE not like '10%', mm.EXPIRYDATE, null ) ) as expiryDateBi, max( if ( m.RISKCODE like '10%', m.BUSINESSSTATUS, null ) ) as businessStatusCi, max( if ( mm.RISKCODE not like '10%', mm.BUSINESSSTATUS, null ) ) as currentStatusBi, max( if ( m.RISKCODE like '10%', m.RISKCODE, null ) ) as riskCodeCi, max( if ( mm.RISKCODE not like '10%', mm.RISKCODE, null ) ) as riskCodeBi, if(tt.ATTENTIONID is null,'0','1')as isAttention, tt.ATTENTIONID as attentionId, h.amlterrorFlag as amlterrorFlag, h.AMLTERRORTYPE as amlterrorType, x.fraud as fraud, h.signStatus as signStatus from (select * from prpthead h ,prptmain m where h.UUID = m.UUID and h.ISSUEDATE >='2024-01-17 00:00:00' AND h.ISSUEDATE < DATE_ADD('2024-01-23 00:00:00',INTERVAL 1 DAY) ) h LEFT JOIN prpattention tt ON (h.UUID = tt.UUID and tt.USERCODE='01A00016' and tt.BUSINESSTYPE='T'), prptmain m INNER JOIN prptmain mm on m.UUID = mm.UUID, prptitemcar t, prptsaleinfo s, prptitemcarext x where h.UUID = m.UUID and h.UUID = t.UUID and h.UUID = s.UUID and s.UUID = x.UUID and h.VALIDSTATUS = '1' AND s.COMCODE LIKE CONCAT('01','%') group by h.UUID ORDER BY h.UPDATETIME desc limit 10; --查看执行计划 +----+-------------+-------+------------+--------+-------------------------------+------------------------+---------+---------------------+--------+----------+---------------------------------------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+--------+-------------------------------+------------------------+---------+---------------------+--------+----------+---------------------------------------------------------------------+ | 1 | SIMPLE | h | NULL | range | PRIMARY,idx_head_issueDate | idx_head_issueDate | 6 | NULL| 138080 | 10.00 | Using index condition; Using where; Using temporary; Using filesort | | 1 | SIMPLE | tt | NULL | ref | idx_attention_usercode | idx_attention_usercode | 43 | const | 1 | 100.00 | Using where | | 1 | SIMPLE | s | NULL | eq_ref | PRIMARY,idx_tsaleinfo_comCode | PRIMARY| 162 | underwriting.h.UUID | 1 | 50.00 | Using where | | 1 | SIMPLE | t | NULL | eq_ref | PRIMARY | PRIMARY| 162 | underwriting.h.UUID | 1 | 100.00 | NULL| | 1 | SIMPLE | x | NULL | eq_ref | PRIMARY | PRIMARY| 162 | underwriting.h.UUID | 1 | 100.00 | NULL| | 1 | SIMPLE | m | NULL | ref | idx_tmain_uuid| idx_tmain_uuid | 162 | underwriting.h.UUID | 1 | 100.00 | NULL| | 1 | SIMPLE | mm | NULL | ref | idx_tmain_uuid| idx_tmain_uuid | 162 | underwriting.h.UUID | 1 | 100.00 | NULL| +----+-------------+-------+------------+--------+-------------------------------+------------------------+---------+---------------------+--------+----------+---------------------------------------------------------------------+ 7 rows in set, 1 warning (0.01 sec) --合并:prptmain的两次访问为一次访问。 --改写后SQL如下,查看其执行计划 explain SELECT m.UUID, max( if ( m.RISKCODE like '10%', m.PROPOSALNO, null ) ) as contractNoCi, max( if ( m.RISKCODE not like '10%', m.PROPOSALNO, null ) ) as contractNoBi, t.PLATENO as plateNo, t.VEHICLEKINDCODE as vehicleKindCode, h.APPLINAME as applicantName, h.INSUREDNAME as insuredName, h.OPERATORCODE as operatorCode, h.OPERATORNAME as operatorName, h.SYSTEMCODE as systemCode, max( if ( m.RISKCODE like '10%', IFNULL(m.TOTALPREMIUM,0)+IFNULL(m.SUMTAX,0), null ) ) as premiumsCi, max( if ( m.RISKCODE not like '10%', IFNULL(m.TOTALPREMIUM,0), null ) ) as premiumsBi, max(IFNULL(m.SUMTAX,0)) as sumTax, max( if ( m.RISKCODE like '10%', m.VALIDDATE, null ) ) as validDateCi, max( if ( m.RISKCODE like '10%', m.EXPIRYDATE, null ) ) as expiryDateCi, max( if ( m.RISKCODE not like '10%', m.VALIDDATE, null ) ) as validDateBi, max( if ( m.RISKCODE not like '10%', m.EXPIRYDATE, null ) ) as expiryDateBi, max( if ( m.RISKCODE like '10%', m.BUSINESSSTATUS, null ) ) as businessStatusCi, max( if ( m.RISKCODE not like '10%', m.BUSINESSSTATUS, null ) ) as currentStatusBi, max( if ( m.RISKCODE like '10%', m.RISKCODE, null ) ) as riskCodeCi, max( if ( m.RISKCODE not like '10%', m.RISKCODE, null ) ) as riskCodeBi, if(tt.ATTENTIONID is null,'0','1')as isAttention, tt.ATTENTIONID as attentionId, h.amlterrorFlag as amlterrorFlag, h.AMLTERRORTYPE as amlterrorType, x.fraud as fraud, h.signStatus as signStatus from prpthead h LEFT JOIN prpattention tt ON (h.UUID = tt.UUID and tt.USERCODE='01A00016' and tt.BUSINESSTYPE='T'), prptmain m , prptitemcar t, prptsaleinfo s, prptitemcarext x where h.UUID=m.uuid and h.UUID = t.UUID and h.UUID = s.UUID and s.UUID = x.UUID and h.VALIDSTATUS = '1' AND s.COMCODE LIKE CONCAT('01','%') AND h.ISSUEDATE >='2024-01-17 00:00:00' AND h.ISSUEDATE < DATE_ADD('2024-01-23 00:00:00',INTERVAL 1 DAY) group by m.UUID ORDER BY h.UPDATETIME desc limit 10; --优化2: +----+-------------+-------+------------+--------+-------------------------------+------------------------+---------+---------------------+--------+----------+---------------------------------------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+--------+-------------------------------+------------------------+---------+---------------------+--------+----------+---------------------------------------------------------------------+ | 1 | SIMPLE | h | NULL | range | PRIMARY,idx_head_issueDate | idx_head_issueDate | 6 | NULL| 140064 | 10.00 | Using index condition; Using where; Using temporary; Using filesort | | 1 | SIMPLE | tt | NULL | ref | idx_attention_usercode | idx_attention_usercode | 43 | const | 1 | 100.00 | Using where | | 1 | SIMPLE | s | NULL | eq_ref | PRIMARY,idx_tsaleinfo_comCode | PRIMARY| 162 | underwriting.h.UUID | 1 | 50.00 | Using where | | 1 | SIMPLE | t | NULL | eq_ref | PRIMARY | PRIMARY| 162 | underwriting.h.UUID | 1 | 100.00 | NULL| | 1 | SIMPLE | x | NULL | eq_ref | PRIMARY | PRIMARY| 162 | underwriting.h.UUID | 1 | 100.00 | NULL| | 1 | SIMPLE | m | NULL | ref | idx_tmain_uuid | idx_tmain_uuid | 162 | underwriting.h.UUID | 1 | 100.00 | NULL| +----+-------------+-------+------------+--------+-------------------------------+------------------------+---------+---------------------+--------+----------+---------------------------------------------------------------------+ --
Using filesort:不是指使用文件排序,而是指有排序
Using temporary:使用了临时表存储中间结果集
using where:使用索引的情况下,需要回表查询所需的数据
using index condition:使用了索引,但需要回表查询数据
虽然少访问一次prptmain 表,但是所有表都使用了索引,且需要分组并排序的结果集本身很大。
所以该SQL已经是最优的了,执行时间变为5s;
10 rows in set (5.22 sec)
root@localhost [underwriting]>
--再次执行性能有提升,主要原因是执行结果已经缓存在内存中.
--后续多次运行也都是5s左右运行结束。
3.SQL2分析及优化
# Query_time: 11.321155 # Query_time: 11.321155 Lock_time: 0.000570 Rows_sent: 1 Rows_examined: 225418 SET timestamp=1705976828; select count(1) from (select * from (SELECT h.UUID, max( if ( m.RISKCODE like '10%', m.policyNo, null ) ) as contractNoCi, max( if ( m.RISKCODE not like '10%', m.policyNo, null ) ) as contractNoBi, t.PLATENO as plateNo, t.VEHICLEKINDCODE as vehicleKindCode, h.APPLINAME AS applicantName, h.INSUREDNAME AS insuredName, ifnull(t.noLicenseFlag,'0') as noLicenseFlag, max( if ( m.RISKCODE like '10%', IFNULL(m.TOTALPREMIUM,0)+IFNULL(m.SUMTAX,0), null ) ) as premiumsCi, max( if ( m.RISKCODE not like '10%', m.TOTALPREMIUM, null ) ) as premiumsBi, max(IFNULL(m.SUMTAX,0)) as sumTax, max( if ( m.RISKCODE like '10%', m.VALIDDATE, null ) ) as validDateCi, max( if ( m.RISKCODE like '10%', m.EXPIRYDATE, null ) ) as expiryDateCi, max( if ( m.RISKCODE like '10%', m.BUSINESSSTATUS, null ) ) as businessStatusCi, max( if ( m.RISKCODE like '10%', m.withdrawStatus, null ) ) as withdrawStatusCi, max( if ( m.RISKCODE not like '10%', m.VALIDDATE, null ) ) as validDateBi, max( if ( m.RISKCODE not like '10%', m.EXPIRYDATE, null ) ) as expiryDateBi, max( if ( m.RISKCODE not like '10%', m.BUSINESSSTATUS, null ) ) as currentStatusBi, max( if ( m.RISKCODE not like '10%', m.withdrawStatus, null ) ) as withdrawStatusBi, max( if ( m.RISKCODE like '10%', m.RISKCODE, null ) ) as riskCodeCi, max( if ( m.RISKCODE not like '10%', m.RISKCODE, null ) ) as riskCodeBi, h.operatorName as operatorName, h.operatorCode as operatorCode, "POLICY" as businessType, s.SALESMANNAME as handlerName, s.SALESMANCODE as handlerCode, 'COMMON' as correctType from prpchead h , prpcmain m, prpcitemcar t,prpcsaleinfo s where h.UUID = m.UUID and h.UUID = t.UUID and h.uuid=s.uuid AND h.APPLINAME LIKE CONCAT('%','袁斌','%') AND s.COMCODE LIKE CONCAT('010103','%') group by h.UUID) ii where case when ii.correctType ='LICENSING' THEN (ii.riskCodeBi !='1234' or ii.riskCodeBi is null ) ELSE 1=1 end and (case when ii.withdrawStatusBi ='0' and ii.withdrawStatusCi='0' THEN (ii.expiryDateBi >NOW() or ii.expiryDateCi >NOW() ) and ii.currentStatusBi='8' and ii.businessStatusCi='8' when ii.withdrawStatusCi ='0' and (ii.withdrawStatusBi !='0' or ii.withdrawStatusBi is NULL) THEN ii.expiryDateCi >NOW() and ii.businessStatusCi='8' when ii.withdrawStatusBi ='0' and (ii.withdrawStatusCi !='0' or ii.withdrawStatusCi is null) THEN ii.expiryDateBi >NOW() and ii.currentStatusBi='8' END)) tmp_count; --查看执行计划 explain select count(1) from (select * from (SELECT h.UUID, max( if ( m.RISKCODE like '10%', m.policyNo, null ) ) as contractNoCi, max( if ( m.RISKCODE not like '10%', m.policyNo, null ) ) as contractNoBi, t.PLATENO as plateNo, t.VEHICLEKINDCODE as vehicleKindCode, h.APPLINAME AS applicantName, h.INSUREDNAME AS insuredName, ifnull(t.noLicenseFlag,'0') as noLicenseFlag, max( if ( m.RISKCODE like '10%', IFNULL(m.TOTALPREMIUM,0)+IFNULL(m.SUMTAX,0), null ) ) as premiumsCi, max( if ( m.RISKCODE not like '10%', m.TOTALPREMIUM, null ) ) as premiumsBi, max(IFNULL(m.SUMTAX,0)) as sumTax, max( if ( m.RISKCODE like '10%', m.VALIDDATE, null ) ) as validDateCi, max( if ( m.RISKCODE like '10%', m.EXPIRYDATE, null ) ) as expiryDateCi, max( if ( m.RISKCODE like '10%', m.BUSINESSSTATUS, null ) ) as businessStatusCi, max( if ( m.RISKCODE like '10%', m.withdrawStatus, null ) ) as withdrawStatusCi, max( if ( m.RISKCODE not like '10%', m.VALIDDATE, null ) ) as validDateBi, max( if ( m.RISKCODE not like '10%', m.EXPIRYDATE, null ) ) as expiryDateBi, max( if ( m.RISKCODE not like '10%', m.BUSINESSSTATUS, null ) ) as currentStatusBi, max( if ( m.RISKCODE not like '10%', m.withdrawStatus, null ) ) as withdrawStatusBi, max( if ( m.RISKCODE like '10%', m.RISKCODE, null ) ) as riskCodeCi, max( if ( m.RISKCODE not like '10%', m.RISKCODE, null ) ) as riskCodeBi, h.operatorName as operatorName, h.operatorCode as operatorCode, "POLICY" as businessType, s.SALESMANNAME as handlerName, s.SALESMANCODE as handlerCode, 'COMMON' as correctType from prpchead h , prpcmain m, prpcitemcar t, prpcsaleinfo s where h.UUID = m.UUID and h.UUID = t.UUID and h.uuid=s.uuid AND h.APPLINAME LIKE CONCAT('%','袁斌','%') AND s.COMCODE LIKE CONCAT('010103','%') group by h.UUID) ii where case when ii.correctType ='LICENSING' THEN (ii.riskCodeBi !='1234' or ii.riskCodeBi is null ) ELSE 1=1 end and (case when ii.withdrawStatusBi ='0' and ii.withdrawStatusCi='0' THEN (ii.expiryDateBi >NOW() or ii.expiryDateCi >NOW() ) and ii.currentStatusBi='8' and ii.businessStatusCi='8' when ii.withdrawStatusCi ='0' and (ii.withdrawStatusBi !='0' or ii.withdrawStatusBi is NULL) THEN ii.expiryDateCi >NOW() and ii.businessStatusCi='8' when ii.withdrawStatusBi ='0' and (ii.withdrawStatusCi !='0' or ii.withdrawStatusCi is null) THEN ii.expiryDateBi >NOW() and ii.currentStatusBi='8' END)) tmp_count; +----+-------------+------------+------------+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+---------+---------------------+--------+----------+--------------------------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+------------+------------+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+---------+---------------------+--------+----------+--------------------------------------------------------+ | 1 | PRIMARY | <derived3> | NULL | ALL | NULL | NULL | NULL | NULL | 41820 | 100.00 | Using where | | 3 | DERIVED | s | NULL | range | PRIMARY,idx_csaleinfo_comCode | idx_csaleinfo_comCode | 83 | NULL | 273714 | 100.00 | Using index condition; Using temporary; Using filesort | | 3 | DERIVED | h | NULL | eq_ref | PRIMARY,idx_chead_operatorCode,idx_chead_operateDate,idx_chead_issueDate,idx_chead_UPDATETIME,idx_chead_inputdate,idx_chead_applicantName,idx_chead_insuredName,idx_chead_makeCom | PRIMARY | 162 | underwriting.s.UUID | 1 | 11.11 | Using where | | 3 | DERIVED | t | NULL | eq_ref | PRIMARY | PRIMARY | 162 | underwriting.s.UUID | 1 | 100.00 | NULL | | 3 | DERIVED | m | NULL | ref | idx_cmain_uuid | idx_cmain_uuid | 162 | underwriting.s.UUID | 1 | 100.00 | NULL | +----+-------------+------------+------------+--------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-----------------------+---------+---------------------+--------+----------+--------------------------------------------------------+ 5 rows in set, 1 warning (0.00 sec) ID=3的四个表都使用了索引,已经是最优的了。 prpcsaleinfo s,s表的访问数据较大,但他查询的是所需的所有数据了。 最外层是派生表,不能使用索引。 explain select * from prpcsaleinfo s where s.COMCODE LIKE CONCAT('010103','%'); +----+-------------+-------+------------+-------+-----------------------+-----------------------+---------+------+--------+----------+-----------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+-------+-----------------------+-----------------------+---------+------+--------+----------+-----------------------+ | 1 | SIMPLE | s | NULL | range | idx_csaleinfo_comCode | idx_csaleinfo_comCode | 83 | NULL | 273714 | 100.00 | Using index condition | +----+-------------+-------+------------+-------+-----------------------+-----------------------+---------+------+--------+----------+-----------------------+ 1 row in set, 1 warning (0.01 sec)
ID=3的四个表都使用了索引,已经是最优的了。
4.SQL3优化
# Query_time: 13.508679 # Query_time: 13.508679 Lock_time: 0.000112 Rows_sent: 1 Rows_examined: 186589 use underwriting; SET timestamp=1705977205; select count(1) from ( SELECT DISTINCT g.UUID FROM PRPJPAYFEEINFO g WHERE 1=1 AND g.DEDUCTIONFLAG= '0' AND g.COMPANYCODE LIKE CONCAT('0104020107','%') AND(g.COMPANYCODE LIKE CONCAT('0104020106','%')OR g.COMPANYCODE LIKE CONCAT('0104020107','%')) and g.BUSINESSTYPE = 'T' and g.PLATENO = '湘A8D900' and g.ISSUEDATE >= '2024-01-03' and g.ISSUEDATE < DATE_ADD('2024-01-23',interval 1 day) ) tmp_count; --查看执行计划: explain select count(1) from ( SELECT DISTINCT g.UUID FROM PRPJPAYFEEINFO g WHERE 1=1 AND g.DEDUCTIONFLAG= '0' AND g.COMPANYCODE LIKE CONCAT('0104020107','%') AND(g.COMPANYCODE LIKE CONCAT('0104020106','%')OR g.COMPANYCODE LIKE CONCAT('0104020107','%')) and g.BUSINESSTYPE = 'T' and g.PLATENO = '湘A8D900' and g.ISSUEDATE >= '2024-01-03' and g.ISSUEDATE < DATE_ADD('2024-01-23',interval 1 day) ) tmp_count; +----+-------------+------------+------------+-------+-------------------------------+-----------+---------+------+--------+----------+-----------------------------------------------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+------------+------------+-------+-------------------------------+-----------+---------+------+--------+----------+-----------------------------------------------------+ | 1 | PRIMARY | <derived2> | NULL | ALL | NULL | NULL | NULL | NULL | 9 | 100.00 | NULL | | 2 | DERIVED | g | NULL | range | idx_payfeeinfo_uuid,ISSUEDATE | ISSUEDATE | 6 | NULL | 399486 | 0.00 | Using index condition; Using where; Using temporary | +----+-------------+------------+------------+-------+-------------------------------+-----------+---------+------+--------+----------+-----------------------------------------------------+ select count(1) from PRPJPAYFEEINFO g where g.PLATENO = '湘A8D900'; +----------+ | count(1) | +----------+ | 8 | +----------+
--相关的表只有8条数据,PLATENO 是车牌号,应该走这个字段上的索引。
--但是 该字段上没有索引,所以需要在该字段上创建索引。
--优化方案:
use underwriting;
create index idx_plateno on PRPJPAYFEEINFO using(plateno);
5.总结
虽然有时候SQL访问的表可以走索引,但是还要看走哪个索引最优。例如上面的SQL,走车牌号这个索引才是最优的,而走时间的索引,访问量较大,不是最优的。