设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 服务器 > 安全 > 正文

如何高效快速地优化MySQL、SQL语句(附源码)(2)

发布时间:2021-01-07 19:30 所属栏目:53 来源:网络整理
导读:最多只会有一条匹配结果,一般是通过主键或唯一键索引来访问.从该表中会有一行记录被读取出来以和从前一个表中读取出来的记录做联合.与const类型不同的是,这是最好的连接类型.它用在索引所有部分都用于做连接并且这

最多只会有一条匹配结果,一般是通过主键或唯一键索引来访问.从该表中会有一行记录被读取出来以和从前一个表中读取出来的记录做联合.与const类型不同的是,这是最好的连接类型.它用在索引所有部分都用于做连接并且这个索引是一个PRIMARY KEY或UNIQUE类型.eq_ref可以用于在进行”=”做比较时检索字段.比较的值可以是固定值或者是表达式,表达示中可以使用表里的字段,它们在读表之前已经准备好了.

  • ref

    JOIN语句中驱动表索引引用的查询.该表中所有符合检索值的记录都会被取出来和从上一个表中取出来的记录作联合.ref用于连接程序使用键的最左前缀或者是该键不是PRIMARY KEY或UNIQUE索引(换句话说,就是连接程序无法根据键值只取得一条记录)的情况.当根据键值只查询到少数几条匹配的记录时,这就是一个不错的连接类型.ref还可以用于检索字段使用”=”操作符来比较的时候.

  • ref_or_null

    与ref的唯一区别就是在使用索引引用的查询之外再增加一个空值的查询.这种连接类型类似ref,不同的是MySQL会在检索的时候额外的搜索包含NULL值的记录.这种连接类型的优化是从MySQL 4.1.1开始的,它经常用于子查询.

  • ?index_merge

    查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge),再读取表数据.这种连接类型意味着使用了Index Merge优化方法.

  • ?unique_subquery

    子查询中的返回结果字段组合是主键或唯一约束.

  • ?index_subquery

    子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或唯一索引.这种连接类型类似unique_subquery.它用子查询来代替IN,不过它用于在子查询中没有唯一索引的情况下.

  • range

    索引范围扫描.只有在给定范围的记录才会被取出来,利用索引来取得一条记录.

  • index

    全索引扫描.连接类型跟ALL一样,不同的是它只扫描索引树.它通常会比ALL快点,因为索引文件通常比数据文件小.MySQL在查询的字段知识单独的索引的一部分的情况下使用这种连接类型.

  • ?fulltext

    全文索引扫描.

  • ?all

    全表扫描.

    • possible_keys

    该字段是指MySQL在搜索表记录时可能使用哪个索引.如果没有任何索引可以使用,就会显示为null.

    • key

    查询优化器从possible_keys中所选择使用的索引.key字段显示了MySQL实际上要用的索引.当没有任何索引被用到的时候,这个字段的值就是NULL.

    • key_len

    被选中使用索引的索引键长度.key_len字段显示了MySQL使用索引的长度.当key字段的值为NULL时,索引的长度就是NULL.

    • ref

    列出是通过常量,还是某个表的某个字段来过滤的.ref字段显示了哪些字段或者常量被用来和key配合从表中查询记录出来.

    • rows

    该字段显示了查询优化器通过系统收集的统计信息估算出来的结果集记录条数.

    • Extra

    该字段显示了查询中MySQL的附加信息.

    • filtered

    这个列式在MySQL5.1里新加进去的,当使用EXPLAIN EXTENDED时才会出现.它显示的是针对表里符合某个条件(WHERE子句或联接条件)的记录数的百分比所作的一个悲观估算.

    SQL改写

    EXPLAIN除了可以显示执行计划外,还可以显示SQL改写.所谓SQL改写,是指MySQL在对SQL语句进行优化前,会基于一些原则进行语句的改写,以方便后面的优化器进行优化生成更优的执行计划.该功能是通过EXPLAIN EXTENDED+SHOW WARNINGS配合使用.下面通过示例说明一下.

    从上面示例中,可看到原有语句中的IN子查询被改写成为表间关联的方式.

    2、统计信息

    查看统计信息也是优化语句中必不可少的一步.通过统计信息可以快速了解对象的存储特征如何.下面说明主要的两类统计信息——表、索引.

    表统计信息 — SHOW TABLE STATUS

    • Name:表名
    • Engine:表的存储引擎类型(ISAM、MyISAM或InnoDB)
    • Row_format:行存储格式(Fixed-固定的、Dynamic-动态的或Compressed-压缩的)
    • Rows:行数量.在某些存储引擎中,例如MyISAM和ISAM他们存储了精确的记录数.不过其他存储引擎中,它可能只是近似值.
    • Avg_row_length:平均行长度.
    • Data_length:数据文件的长度.
    • Max_data_length:数据文件的最大长度.
    • Index_length:索引文件的长度.
    • Data_free:已分配但未使用了字节数.
    • Auto_increment:下一个autoincrement(自动加1)值.
    • Create_time:表被创造的时间.
    • Update_time:数据文件最后更新的时间.
    • Check_time:最后对表运行一个检查的时间.执行mysqlcheck命令后更新,仅对MyISAM有效.
    • Create_options:额外留给CREATE TABLE的选项.
    • Comment:当创造表时,使用的注释(或为什么MySQL不能存取表信息的一些信息).
    • Version:数据表的’.frm’文件版本号.
    • Collation:表的字符集和校正字符集.
    • Checksum:实时的校验和值(如果有的话).

    3、索引统计信息 — SHOW INDEX

    (编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读