Mysql性能法宝之一:索引

很多企业在面试时都会问到MySQL性能优化这方面的。那么如何快速处理查询慢的问题?最简单的就是为表字段建立索引。

下面是一个很耗时的语句:

SELECT * FROM (SELECT COUNT(1) AS TOTAL FROM XH_XXDKQ_TB_13304319115 WHERE 1=1 AND SBSJ <= str_to_date('2019-06-11 23:59:59','%Y-%m-%d %H:%i:%s') AND HLY_ID IN (SELECT CAST(HLY_ID AS CHAR) AS HLY_ID FROM XH_HLY_TB_13304319115 WHERE 1=1 AND NSJGID IN (405,404,403,402,401,400,399,398,397,396,395,394,393,392,391,390,389,388,387,386,385,384,383,382,381,380,379,378,376,375,374,373,372,371,370,369,368,367,366,365,364,363,362,361,360,359,358,357,356,355,354,353,351,350,349,348,347,346,345,344,343,342,341,340,339,338,337,336,335,334,333,332,331,330,329,328,327,326,321,320,319,318,317,316,315,314,313,312,311,310,309,308,307,305,304,303,302,301,300,299,298,297,296,295,294,293,292,291,290,289,288,287,286,285,284,283,282,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,266,265,264,263,262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,111,110,109,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,10,9,8,7,5,4,3,2,1)) ) AS T

不建任何索引查询的信息输出如下:

SELECT * FROM (SELECT COUNT(1) AS TOTAL FROM XH_XXDKQ_TB_13304319115 WHERE 1=1 AND SBSJ <= str_to_date('2019-06-11 23:59:59','%Y-%m-%d %H:%i:%s') AND HLY_ID IN (SELECT CAST(HLY_ID AS CHAR) AS HLY_ID FROM XH_HLY_TB_13304319115 WHERE 1=1 AND NSJGID IN (405,404,403,402,401,400,399,398,397,396,395,394,393,392,391,390,389,388,387,386,385,384,383,382,381,380,379,378,376,375,374,373,372,371,370,369,368,367,366,365,364,363,362,361,360,359,358,357,356,355,354,353,351,350,349,348,347,346,345,344,343,342,341,340,339,338,337,336,335,334,333,332,331,330,329,328,327,326,321,320,319,318,317,316,315,314,313,312,311,310,309,308,307,305,304,303,302,301,300,299,298,297,296,295,294,293,292,291,290,289,288,287,286,285,284,283,282,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,266,265,264,263,262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,111,110,109,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,10,9,8,7,5,4,3,2,1)) ) AS T

受影响的行: 0
时间: 15.036s

建立索引:

c67fa658456d6a75de56cde2dfec51717e9.jpg

再次执行查询:

[SQL]SELECT * FROM (SELECT COUNT(1) AS TOTAL FROM XH_XXDKQ_TB_13304319115 WHERE 1=1 AND SBSJ <= str_to_date('2019-06-11 23:59:59','%Y-%m-%d %H:%i:%s') AND HLY_ID IN (SELECT CAST(HLY_ID AS CHAR) AS HLY_ID FROM XH_HLY_TB_13304319115 WHERE 1=1 AND NSJGID IN (405,404,403,402,401,400,399,398,397,396,395,394,393,392,391,390,389,388,387,386,385,384,383,382,381,380,379,378,376,375,374,373,372,371,370,369,368,367,366,365,364,363,362,361,360,359,358,357,356,355,354,353,351,350,349,348,347,346,345,344,343,342,341,340,339,338,337,336,335,334,333,332,331,330,329,328,327,326,321,320,319,318,317,316,315,314,313,312,311,310,309,308,307,305,304,303,302,301,300,299,298,297,296,295,294,293,292,291,290,289,288,287,286,285,284,283,282,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,266,265,264,263,262,261,260,259,258,257,256,255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,111,110,109,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,10,9,8,7,5,4,3,2,1)) ) AS T

受影响的行: 0
时间: 0.180s

很多时候我们都知道要做数据库级别的优化,但在开发过程中往往被忽略掉对这部分的优化,这点很值得注意。

索引查询范围标识:

1.const 
如果是根据主键或唯一索引 只取出确定的一行数据。是最快的一种。 
2.range 
索引或主键,在某个范围内时 
3.index 
仅仅只有索引被扫描 
4.all 
全表扫描,最令人心痛

转载于:https://my.oschina.net/boonya/blog/3060621

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值