详解MySQL数据库常见的索引题目:无索引,隐式转换,附实例声名
概述 在这些年的事变之中,因为SQL题目导致的数据库妨碍层出不穷,而索引题目是SQL题目中呈现频率最高的,常见的索引题目包罗:无索引,隐式转换。 索引题目 1、无索引 当数据库中呈现会见表的SQL无索引导致全表扫描,假如表的数据量很大,扫描大量的数据,应用哀求变慢占用数据库毗连,毗连会萃很快到达数据库的最大毗连数配置,新的应用哀求将会被拒绝导致妨碍产生。 2、隐式转换 隐式转换是指SQL查询前提中的传入值与对应字段的数据界说纷歧致导致索引无法行使。常见隐士转换如字段的表布局界说为字符范例,但SQL传入值为数字;大附崆字段界说collation为区分巨细写,在多表关联的场景下,其表的关联字段巨细写敏感界说各不沟通。隐式转换会导致索引无法行使,进而呈现上述慢SQL会萃数据库毗连数跑满的环境。 无索引实例 表布局: 执行打算: 从上面的SQL看到执行打算中ALL,代表了这条SQL执行打算是全表扫描,每次执行必要扫描707250行数据,这长短常耗损机能的,该怎样举办优化?添加索引。 验证mo字段的过滤性: 可以看到mo字段的过滤性长短常高的,进一步验证可以通过select count(*) as all_count,count(distinct mo) as distinct_cnt from user,通比拟 all_count和distinct_cnt这两个值举办比拟,假如all_cnt和distinct_cnt相差甚多,则在mo字段上添加索引长短常有用的。 添加索引
执行打算: 隐式转换 表布局: 执行打算:
怎样办理: 上述案例中因为表布局界说mo字段后字符串数据范例,而应用传入的则是数字,进而导致了隐式转换,索引无法行使,以是有两种方案: 第一,将表布局mo修改为数字数据范例。 第二,修改应用将应用中传入的字符范例改为数据范例。 总结 在行使索引时,我们可以通过explain+extended查察SQL的执行打算,判定是否行使了索引以及产生了隐式转换。 因为常见的隐式转换是由字段数据范例以及collation界说不妥导致,因此我们在计划开拓阶段,要停止数据库字段界说,停止呈现隐式转换。 【编辑保举】
点赞 0 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |