mysql的explain

查看一些mysql性能参数

   show status like 'value'

   其中value可以为:

connections#连接数
uptime#服务器上线时间
slow_queries#慢查询次数
com_select#查询操作次数
com_insert#插入操作次数
com_update#更新操作次数
com_delete#删除操作次数

分析查询语句

   使用explain 分析查询预计

explain select * from test where a=2\G;

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test
   partitions: NULL
         type: ref
possible_keys: a
          key: a
      key_len: 4
          ref: const
         rows: 3
     filtered: 100.00
        Extra: Using index
1 row in set, 1 warning (0.00 sec)
  • 查询结果分析
    • id : select 标识符,select查询的序列号
    • select_typeselect查询的类型,可以为一下几种类型:
      1. simple简单的查询,不包括连接查询和子查
      2. primary主查询 ,或者是最外面的查询
      3. union连接查询 的第二个或者后面的查询
      4. dependent union 联合查询的第二个查询或者后面的查询语句
      5. union result 连接查询的结果
      6. subquery 子查询的第一个select 语句
      7. dependent subquery子查询的第一个select 语句,取决于外面的查询
    • table :查询的表
    • type:表示表的连接类型

1.system:mysql系统的仅有一行的系统表,是const类型的特例
2.const: 数据表最多有一个匹配行,它将在查询时被读取,并在余下的查询优化中当做常量对待,const查询会很快,因为它只读取一次,const使用在常量值比较主键或者唯一索引所有部分的场合。
3.eq_ref:当表的索引是unique或者primary key的时候(索引的全部都在where里面),where条件使用=比较且比较的字段都是这两种索引的时候,就可以使用这种索引

```
select * from ref_table, other_table where ref_table.key_column=other_table.column;

select * from ref_table, other_table where ref_table.key_column_part1 = other_table.column1 and ref_table.key_column_part2 = other_table.column2;
```

4.ref:当使用的索引的值不是唯一的时候,即使用的索引不是unique或者primary key的全部的时候(索引的左子集),ref能使用= <=> 比较

select * from ref_table where not_all_unique_primary_key = value;
select * from ref_table, other_table where  ref_table.not_all_unique_primary_key = other_table.column;

select * from ref_table ,other_table where ref_table.key_column_part1=other_table.column and ref_table.key_column_part2=2;

5.index_or_null : 同ref,但是索引的字段可以使用null

select * from ref_table where key_column = value or key_colmn is null

6.index_merge:该类型表示使用了索引合并优化方法,key会列出包含索引的清单,key_len包含了使用索引的最长的关键元素

7.unique_subquery:该类型替换了in子查询的ref

value inselect primary_key form table where some_expr)

unique_subquery是一个索引查找函数,完全可以可以替换子查询,效率更高。

8.index_subquery:该连接类型类似unique_subquery,但是只能用于以下类型

value inselect key_column form single_table where some_expr)

9.range:只检索给定范围的行,key列会显示使用的索引,key_len列包含了索引关键的最长关键元素。
当使用 =、<>、>、<、>=、<=、is null 、!= 、between 或者in的操作符,用常量比较关键字列时,类型为range

select * from table where key_column = 1select * from table where key_column in (1,2,6);

select * from table where key_part1 = 1 where key_part2 in (2,3,4);

10.index:直接扫描索引树。
11.all:全表扫描,应该避免这种情况

  • possible_keys: mysql能使用哪些索引找到 该行,如果是null,表示无法使用索引找到该行
  • key:表示实际找到该行使用到的索引,如果没有使用使用到索引则该行为null,若要强制或者忽略possible_keys的值,可以使用 force indexuse index或者ignore index
  • key_len:表示索引字段按字节计算的长度,如果键是Null,则长度为null,通过key_null可以确定mysql将实际使用一个多列索引的几个字段
  • ref:表示使用哪个列或常数与索引一起查询记录
  • rows:显示mysql在表中进行查询的行数
  • extra:表示在mysql中查询处理的详细信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值