博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 开发进阶篇系列 3 SQL 优化(索引使用方法)
阅读量:5816 次
发布时间:2019-06-18

本文共 1299 字,大约阅读时间需要 4 分钟。

一. 本章介绍mysql中的索引的分类,存储,使用方法的介绍

  1.  索引的存储分类

  MyISAM存储引擎的表的数据和索引是自动分开存储的,各自是独立的一个文件, innodb 存储引擎的表的数据和索引是存储在同一个表空间里面,可以有多个文件组成。 MyISAM和Innodb存储引擎都支持btree索引,memory/heap存储引擎支持hash和btree索引。

  2. mysql如何使用索引

查询要使用索引最主要的条件是查询条件中需要使用索引关键字,如果是多列索引,那么只有索引条件使用了多列关键字最左边的前缀时,才可以使用索引,否则不能.

  (1) 创建多列索引

-- 多列索引又叫复合索引  创建city表的多列CREATE INDEX ix1 ON city(cityname(10),citycode);    -- 使用cityname进行查询,发现即使不使用citycode也能使用到索引,这就是索引前缀的特性EXPLAIN SELECT * FROM city WHERE cityname='12'

-- 使用citycode进行查询,就没有使用索引EXPLAIN SELECT * FROM city WHERE citycode='12'

  (2) 使用like

    需要使用模糊查询时, 建了索引的字段 %必须放在关键词后面

-- 如下所示EXPLAIN SELECT * FROM city WHERE cityname LIKE '12%'

  (3) 使用条件is null

    如果列名是索引,那么使用is null 会使用到索引

-- 如下所示EXPLAIN SELECT * FROM city WHERE cityname IS NULL

  

  3. 存在索引但不会使用到索引 原因如下4点:

(1) 使用索引比全表扫描更慢,则不使用索引。 比如key分布在1到100之间,使用索引 key>1 and key<90 。

(2) 使用memory/heap表 使用where条件不使用 = 进行查询时,那么不会用到索引。
(3) 用or分割开的条件, 如果or 前面条件中列有索引,or后面列没有索引,那么索引不会被用到,如下所示:

--  country_id 列是索引  citycode不是索引EXPLAIN SELECT * FROM city WHERE country_id=2 OR citycode='000'

--  country_id 列是外键索引  city_id主键索引EXPLAIN SELECT * FROM city WHERE country_id=2 OR city_id=2 (发现key也是为空?后面在分析)

  (4) 列类型是字符串时,条件值需加引号,不然用不到索引

--  没有加引号,需要用到索引EXPLAIN SELECT * FROM city WHERE cityname=22

转载于:https://www.cnblogs.com/MrHSR/p/9335124.html

你可能感兴趣的文章
MySQL索引底层实现
查看>>
python例子
查看>>
环境变量(总结)
查看>>
thinkphp5中的一些关于命名空间的tisp
查看>>
ios之UILabel
查看>>
第6章-装饰模式
查看>>
CSRF与XSS攻击的原理与防范
查看>>
Java基础之String,StringBuilder,StringBuffer
查看>>
狼图腾读后感
查看>>
1月9日学习内容整理:爬虫基本原理
查看>>
安卓中数据库的搭建与使用
查看>>
AT3908 Two Integers
查看>>
渐变色文字
查看>>
C++ 0X 新特性实例(比较常用的) (转)
查看>>
node生成自定义命令(yargs/commander)
查看>>
各种非算法模板
查看>>
node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)
查看>>
PIE.NET-SDK插件式二次开发文档
查看>>
如何创建Servlet
查看>>
.NET 设计规范--.NET约定、惯用法与模式-2.框架设计基础
查看>>