国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

详解MySQL数据库常见的索引问题:无索引,隐式转

发布时间:2019/09/06标签:   索引    点击量:

原标题:详解MySQL数据库常见的索引问题:无索引,隐式转
概述在这些年的任务当中,因为SQL成绩招致的数据库毛病层出不穷,而索引成绩是SQL成绩中呈现频次最高的,罕见的索引成绩包含:无索引,隐式转换。索引成绩1、无索引当数据库中呈现拜访表的SQL无索领导致全表扫描,假如表的数据量很大,扫描大批的数据,利用恳求变慢占用数据库衔接,衔接沉积很快到达数据库的最大衔接数设置,新的利用恳求将会被谢绝招致毛病产生。2、隐式转换隐式转换是指SQL查问前提中的传入值与对应字段的数据界说纷歧致招致索引无奈应用。罕见山人转换如字段的表构造界说为字符范例,但SQL传入值为数字;或许是字段界说collation为辨别巨细写,在多表关系的场景下,其表的关系字段巨细写敏感界说各不雷同。隐式转换会招致索引无奈应用,进而呈现上述慢SQL沉积数据库衔接数跑满的情形。无索引实例表构造:

详解mysql数据库常见的索引问题--无索引,隐式转换,附实例说明
履行打算:
详解mysql数据库常见的索引问题--无索引,隐式转换,附实例说明
从下面的SQL看到履行打算中ALL,代表了这条SQL履行打算是全表扫描,每次履行须要扫描707250行数据,这长短常耗费机能的,该怎样停止优化?增加索引。考证mo字段的过滤性:
详解mysql数据库常见的索引问题--无索引,隐式转换,附实例说明
能够看到mo字段的过滤性长短常高的,进一步考证能够经过select count(*) as all_count,count(distinct mo) as distinct_cnt from user,通对照 all_count和distinct_cnt这两个值停止对照,假如all_cnt和distinct_cnt相差甚多,则在mo字段上增加索引长短常无效的。增加索引mysql>altertableuseraddindexind_mo(mo);mysql>SELECTuidFROM`user`WHEREmo=13772556391LIMIT0,1;履行打算:
详解mysql数据库常见的索引问题--无索引,隐式转换,附实例说明
隐式转换表构造:
详解mysql数据库常见的索引问题--无索引,隐式转换,附实例说明
履行打算:mysql>explainextendedselectuidfrom`user`wheremo=13772556391limit0,1;mysql>showwarnings;Warning1:Cannotuseindex'ind_mo'duetotypeorcollationconversiononfield'mo'Note:select`user`.`uid`AS`uid`from`user`where(`user`.`mo`=13772556391)limit0,1

版权信息Copyright © 银河官网 版权所有    ICP备案编号:鲁ICP备09013610号