原创

mysql索引加快sql查询的速度


之前对项目的一些加速也基本能用到的都用到了!但是sql语句抛弃来慢就不是框架的原因了!

于是我我就用器了最笨的方法去排查


首先:用框架的getlastsql()方法获取到你的sql!哪里慢你就获取那个页面的sql

然后:打开Navicat客户端,排查where 条件后面的条件  比如 where (1) and  (2) and (3)

        我们就分别去掉 其中的 1  2  3条件   然后再客户端中看是哪个条件导致sql运行很慢

最后:找到的 运行慢的 条件,我们给这些对应的字段添加索引~

如:

ALTER TABLE `cmstop_qudonghao_user`
ADD INDEX `nomal` (`username`, `nickname`, `headimgurl`, `status`, `zhuanlanming`, `oid`) USING BTREE ;


数据库的索引其实是非常重要的,对于数据量比较大的数据库一定要有索引,不然你查询几条数据,sql跑个5S是很有可能的!


我之前的数据库大概有不到50万条数据,查询个语句就花了差不多5s钟的时间,就是因为我没有索引!

因为是二次开发,自己加了字段后并没有加索引导致速度超级慢!


=====最后普及下索引该使用的情况=======

可能用到索引的地方:

where 子句,order by,group by

不需要创建索引的情况:

1. 表比较小

2.赋值有限的列(枚举),不要创建索引。创建的索引返回的行越少越好,此时区分度大。

3.用不上索引的列,不要创建索引。

4.长字符串的列,不要全部创建索引,但可以使用短索引(名字的头8个字符)。

索引有效的情况:

<,<=,=,>,>=,between,in,like 'admin%',独立索引+or+独立索引+mysiam

索引失效的情况:

1. or+innodb

3. like查询是以%开头,不使用索引。like '%admin' 

4. 字符类型在where子句中不加引号,不使用索引

5. not in 或<> 或!= 

6.对字段加函数或者运算的

7. 在order by操作中,mysql只有在排序条件不是查询条件表达式时才使用索引。尽管如此,在涉及多个数据表的查
询里,即使有索引可用,那些索引在加快ORDER BY操作方面也没什么作用。

9. 在JOIN操作中,只有在主键和外键的数据类型相同时才能使用索引,否则即使建立了索引也不会使用。

10. is not null 或 is null 索引会失效

11. 如果mysql估计使用全表扫描要比使用索引快,则不使用索引。

比如:列id均匀的分布在1-100之间。下面的sql则不会使用索引
select * from table_name where id > 1 and id<90;
 

查看索引的使用情况
show status like ‘handler_read%';
大家可以注意:
handler_read_key:这个值越高越好,越高表示使用索引查询到的次数
handler_read_rnd_next:这个值越高,说明查询低效

索引的分类

  单值索引

    即一个索引只包含单个列,一个表可以有多个单列索引。

  唯一索引

    索引列的值必须唯一,但允许有空值。

  复合索引

    即一个索引包含多个列。




MySQL索引结构

    BTree索引

    Hash索引

    full-text全文索引

    R-Tree索引

留言反馈
问题反馈渠道,如有软件无法下载或者其他问题可反馈。【由于某种原因,目前留言不展示】
用户需要登录后才能留言反馈