For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
数据库架构开发是目前大多数软件开发程序员都需要熟练掌握的一个编程开发技术,而本文我们就通过案例分析来简单了解一下,数据库查询优化都有哪些注意事项。
id有几个select就会有几个id,id可能会存在相同的情况,相同id两条数据前面一条是驱动表,后一张是被驱动表(这里有个例外:涉及子查询优化器会进行重写,id可能不会按select计数)
id相同可以认为是从上往下执行
id越大优先级越高越有优先执行
id每个号码代表一个独立查询,查询越少越好
select_type:
SIMPLE表示简单查询,不包含UNION查询和子查询,连接查询也是SIMPLE
PRIMARY表示主查询,或者是外层的查询语句,对于包含UNION,UNIONALL或者子查询的大查询来说,它是由几个小查询组成的,左边的查询就是PRIMARY.
UNION表示查询的二个或者后面的查询语句。对于包含UNION,UNIONALL或者子查询的大查询来说,它是由几个小查询组成的,左边的查询以外的就是UNION
DEPENDENTUNION链接查询中的二个或后面的查询语句,相关的
SUBQUERY:不相关子查询
DEPENDENTSUBQUERY:相关子查询
table:表示查询的表
type:表示表的链接类型,下面从优到差
system级别:只有一条数据的系统表或衍生表只能有一条数据的主查询很明显实际开发当中我们是不会只有一条数据的
const级别:仅仅能查出一条的SQL语句并且用于Primarykey或unique索引;
eq_ref级别:性索引:对于每个索引键的查询,返回匹配行数据(有且只有1个,不能多,不能0);此种情况常见于索引和主键索引
ref级别:非性索引:对于每个索引键的查询,返回匹配的所有行(可以是0,或多个)。
range级别:检索指定范围的行,查找一个范围内的数据,where后面是一个范围查询(between,in,><>=);in有时有可能会失效,导致为ALL;
index级别:与all链接相同,除了只扫描索引树
ALL级别:进行完整的表扫描
possible_keys:能使用的索引
key:表示实际使用到的索引
key_len:表示选择的索引字段按字节计算的长度,对于联合索引有一定参考价值
ref:表示使用那一列或常数与索引一起来查询
rows:必须检查的行数,越小越好
extra:
Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
Rangecheckedforeach:没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的慢的连接之一
Usingfilesort:发生了硬盘或内存排序,一般是由orderby或groupby触发的;的情况,排序的字段不是驱动表的字段,则会使用临时表将数据都添加进去,后进行排序,如果数据大则硬盘排序,如果小则内存排序.可以考虑使用联合索引把where后的查询字段和排序字段联合索引
Usingindex:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,使用了覆盖索引优化
Usingtemporary:使用了临时表,通常和filesort一起发生.情况:使用了派生表.
Usingwhere:数据库服务层从存储引擎提取了数据又进行了一次条件过滤,不代表一定有回表
usingindexcondition:ICP优化,从5.6之后提供.将过滤条件下推到存储引擎层执行,能更好的利用复合索引来过滤数据,减少IO.
Usingindexforgroup-by:使用了松散索引扫描
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。