(1)索引类型:

  1. Btree索引:抽象的可以理解为“排好序的”快速查找结构
    myisam,innodb中默认使用Btree索引

  2. hash索引:hash索引计算速度非常的快,但数据是随机放置的,无法对范围进行优化,无法利用前缀索引,排序也无法优化
    memory表里默认使用hash索引

(二)单列索引与多列索引
一、单列索引
二、多列索引
    怎么才能够让多列索引充分发挥作用?
    1.在多列索引上,索引使用匹配需要符合左前缀规则

有如下联合索引:index(a,b,c)

select * from test_table where a=1 and b=2 and c=3;               从左到右都使用到了索引,虽然有大于号,但是也会使用半块索引

select * from test_table where a=1 and c=3 and b=3;               mysql很聪明的,虽然查询的条件列不是按照顺序来的,但是mysql会自动识别的所以仍然都可以使用到索引

select * from test_table where a=1 and b=2 and c>3;               从左到右都使用到了索引,虽然有大于号,但是也会使用半块索引

select * from test_table where a=1 and b>2 and c=3;               从左到右都使用到了索引,虽然有大于号,但是也会使用半块索引,依然c列索引也会使用到,所以都使用到了索引

select * from test_table b=2 and c=3;                                         索引生效是从左到右的如果断掉了后面的索引列就不会生效了,这个没有用到a索引,所以 一个索引都没有使用到

select * from test_table  b=2;                                                       同上

select * from test_table  c=3;                                                        同上

分组统计建议要先按照分组的字段进行排序然后再统计

我们想知道某条sql语句是不是按照我们希望的方式使用了索引我们可以使用explain来查看sql语句的执行计划:
explain用法说明:

只需要在sql语句前面加上explain即可

mysql> explain select * from t where c1='a' and c5='e' order by c2,c3;

+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+

| id | select_type | table | type | possible_keys | key  | key_len | ref   | rows | Extra                    |

+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+

|  1 | SIMPLE      | t     | ref  | c1            | c1   | 3       | const |    6 | Using where; Using index |

+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+

table:表示使用的数据表
type:连接类型有多个值,不同的值体现了sql语句不同的优化级别

keys:mysql使用的索引

key_len:mysql使用的索引长度

rows:mysql执行查询的行数,数值越大越不好说明没有用好索引

extra:mysql解决查询的详细详细有几个参数需要解释下
    using   filesort:说明使用执行该sql语句先使用了数据排序

using index:说明使用了索引

using temporary:说明mysql创建了临时表来容纳结果

(三)show profiles的使用

一般情况情况是这样的我们考虑需要建立给表建立索引是由于查询缓慢,这个时候我们可以通过开启show profiles来了解我们优化的进展,和方案的可行性。

show profiles:默认一般都是关闭的,但是会话级别可以开启这个功能,开启后可以让mysql收集在执行sql语句时的所有相关信息,通过这个可以比较明确的了解优化的成果。

1.查看show profile是否开启

mysql> show variables like "%pro%";

+---------------------------+-------+

| Variable_name             | Value |

+---------------------------+-------+

| have_profiling            | YES   |

| profiling                 | OFF   |

| profiling_history_size    | 15    |

| protocol_version          | 10    |

| proxy_user                |       |

| slave_compressed_protocol | OFF   |

| stored_program_cache      | 256   |

+---------------------------+-------+

2.如果profiling关闭了则开启选项
    mysql> set profiling=1;

3.查看sql语句运行的信息

在开启profile后系统中执行的sql语句都将被记录

mysql> show profiles;

+----------+-------------+--------------------------------------------------------------------------------------------------------+

| Query_ID | Duration    | Query                                                                                                  |

+----------+-------------+--------------------------------------------------------------------------------------------------------+

|        1 |  0.00031950 | show variables like "%pro%"                                                                            |

|        2 |  0.00020125 | show tables                                                                                            |

|        3 |  0.40749175 | select count(*) from b2b_my_test_value                                                                 |

|        4 |  0.00008600 | show processlist                                                                                       |

|        5 |  0.40956300 | select count(*) from b2b_my_test_value                                                                 |

|        6 |  0.00007225 | show profile for query                                                                                 |

|        7 |  0.00004150 | show profile for query                                                                                 |

|        8 | 23.30362350 | select avg(`my_age`),`my_aihao` from b2b_my_test_value group by `my_aihao`                             |

|        9 |  0.00018900 | show index from b2b_my_test_value                                                                      |

|       10 |  0.00015050 | explain select avg(`my_age`),`my_aihao` from b2b_my_test_value group by `my_aihao`                     |

|       11 |  0.00014875 | explain select avg(`my_age`),`my_aihao` from b2b_my_test_value group by `my_aihao`                     |

|       12 |  0.00016725 | explain select avg(`my_age`),`my_aihao` from b2b_my_test_value group by `my_aihao` order by `my_aihao` |

|       13 |  0.00018725 | explain select avg(`my_age`),`my_aihao` from b2b_my_test_value group by `my_aihao`                     |

|       14 |  0.00020875 | show index from b2b_my_test_value                                                                      |

|       15 |  0.00008125 | explain select avg(`my_age`),`my_aihao` from b2b_my_test_value where   group by `my_aihao`             |

+----------+-------------+--------------------------------------------------------------------------------------------------------+

15 rows in set, 1 warning (0.00 sec)

这样我们就可以很方便的了解sql执行的时间了

mysql索引优化续的更多相关文章

  1. mysql索引优化

    mysql 索引优化 >mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引. >越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间 ...

  2. Mysql 索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  3. 知识点:Mysql 索引优化实战(3)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 索引原理知识回顾 索引的性 ...

  4. MySQL索引优化步骤总结

    在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sq ...

  5. MySQL索引优化看这篇文章就够了!

    阅读本文大概需要 5 分钟. 来源:cnblogs.com/songwenjie/p/9410009.html 本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引 ...

  6. mysql索引优化比普通查询速度快多少

    mysql索引优化比普通查询速度快多少 一.总结 一句话总结:普通查询全表查询,速度较慢,索引优化的话拿空间换时间,一针见血,所以速度要快很多. 索引优化快很多 空间换时间 1.软件层面优化数据库查询 ...

  7. mySql索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  8. 【ZZ】MySQL 索引优化全攻略 | 菜鸟教程

    MySQL 索引优化全攻略 http://www.runoob.com/w3cnote/mysql-index.html

  9. mysql数据库优化课程---17、mysql索引优化

    mysql数据库优化课程---17.mysql索引优化 一.总结 一句话总结:一些字段可能会使索引失效,比如like,or等 1.check表监测的使用场景是什么? 视图 视图建立在两个表上, 删除了 ...

随机推荐

  1. 搭建linux上的Eclipse+PHP编程环境

    最近打算学PHP,于是查阅资料搭建了ubuntu(14.04.3)上的PHP IDE环境 一.准备工作(可略) 主要是推荐科大的源和配置源的方法,因为后于步骤使用到了apt,科大的源非常快,并且有个针 ...

  2. String StringBuilder StringBuffer 对比 总结得非常好

    转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...

  3. HDU 1438 钥匙计数之一(状压DP)题解

    思路: 每个槽有4种深度,一共有2^4种状态.然后开4维来保存每一次的状态:dp[ 第几个槽 ][ 当前状态 ][ 末尾深度 ][ 是否符合要求 ]. 代码: #include<cstdio&g ...

  4. Combobox绑定泛型字典时提示“复杂的 DataBinding 接受 IList 或 IListSource 作为数据源”的解决方法

    一般情况下我们会将 DataTable 或 DataView 绑定到 Combobox 控件上,这时候进行数据绑定是没有问题的,因为DataTable 和 DataView 都继承了 IList 接口 ...

  5. iframe.contentWindow介绍

    一.在使用iframe的页面,要操作这个iframe里面的DOM元素可以用: contentWindow.contentDocument(测试的时候chrome浏览器,要在服务器环境下) 1.先获取i ...

  6. bzoj3172: [Tjoi2013]单词 ac自动机

    某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整数N,表示有多少个单词,接下来N行每行一个单词.每个单词 ...

  7. 直方图及low_value、high_value

    直方图 Histogram是一种特殊的列统计信息,详细描述了目标列的数据分布情况.存储在数据字典基表 histogram$; 专门为了准确评估分布不均匀的目标列的可选择率.结果集的cardianlit ...

  8. mysql 判断表字段是否存在,然后修改

    -- ---------------------------- -- 判断 vrv_paw_rule 表是否存在 thresholdMin 字段,不存在则添加; 存在则修改字段类型 DELIMITER ...

  9. 201621123006 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 结合题集题目7-1回答 1.1 自己以前编写的代码中经常出现 ...

  10. react中父组件调用子组件的方法

    1.直接使用ref进行获取 import React, {Component} from 'react'; export default class Parent extends Component ...