索引的类型
1. 普通索引:最基本的索引,没有任何限制。
2. 主键索引(Key):特殊的唯一索引,不允许有空值。
3. 唯一索引(Unique):索引列的值必须唯一,允许有空值。如果是组合索引,则该组合的值必须唯一。
4. 组合索引(Compose):多个列组合的索引。比如cityId、address、name三列建了组合索引,则相当于建立了三组索引:cityId、address、name, cityId、address, cityId, 这是因为MySQL组合索引“最左前缀”的结果,就是从最左边的列开始组合。
5. 短索引:创建索引时,如果是varchar或char列,索引的length可以小于列的实际长度,比如name(20),可以建索引name_index(10),既提高查询速度,也提高写入、更新速度。
索引起作用的SQL语句
=、>、<、>=、<=、like、like 'prefix%'、in、between
索引不起作用的SQL语句
1. 有Null值的列
只要列中有一个Null值,就不会被包含在索引中,复合索引中只要有一列含有Null值,那么这一列对于复合索引就是无效的。所以在数据库设计时应避免NULL的存在(用其他方式表达你想表达的NULL,比如 -1?)
2. like语句的%在前
匹配符%在查询关键词前面的like语句,将不使用索引。
select * from city where name like '%南'
3. not in、<>、!= 语句。
4. where语句中已经使用了索引,order by后面的列不能再使用索引。
5. 在列上进行函数计算
select * from user where YEAR(update_time)>2012
这将在每行数据进行计算,导致索引失效从而全表扫描。可以将语句改为:
select * from user where update_time>‘2012-01-01’
6. 存了数值的字符串类型字段(如手机号),查询时记得不要丢掉值的引号,否则无法用到该字段相关索引。反之则没关系,也即:
select * from test where mobile = 13711112222;
可是无法用到mobile字段的索引的哦(如果mobile是char 或 varchar类型的话)
哪些列适合建索引?
where、join、order by或group by子句中的列适合建索引。
什么样的字段不需要建索引?
1. 字段值很少,比如:性别、状态、是否有效等。
2. 太长的列,可以选择只建立部分索引,(如:只取前十位做索引)
3. 更新非常频繁的数据不适宜建索引。
一次查询只能用到一个索引
多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。
多列查询建索引
一次查询只能用到一个索引,所以 首先枪毙 a,b各建索引方案
a还是b? 谁的区分度更高(同值的最少),建谁!
当然,联合索引也是个不错的方案,ab,还是ba,则同上,区分度高者,在前。
联合索引(最左前缀索引)
建立一个组合索引:ALTER TABLE article ADD INDEX idx_title_time (title(50),time(10))。建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
–title,time
–title
where a = “xxx” 可以使用 AB 联合索引
where b = “xxx” 则不可 (再想象一下,这是书的目录?)
所以,大多数情况下,有AB索引了,就可以不用在去建一个A索引了。
最左前缀:
顾名思义,就是最左优先,比如创建了name,age,address多列索引,相当于创建了(name)单列索引,(name,age)组合索引以及(name,age,address)组合索引。
注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
查看索引
show index from tablename;
explain select ……;
分享到:
相关推荐
MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...
MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...
关于mysql索引一些优化介绍与创建原则,还有对order by排序的算法的介绍等等
Mysql索引优化案例 在对数据库进行操作时,尤其是在处理包含大量数据的表时,查询的性能问题是一个常见且重要的话题。在实际工作中,对于Mysql数据库进行索引优化是提高查询效率、减少查询时间的重要手段。本案例将...
"Mysql索引优化解决方案" MySQL索引是帮助MySQL高效获取数据的数据结构。MySQL在存储数据之外,还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们就可以通过数据结构上实现...
mysql索引优化思维导图
### MySQL的索引优化 #### 一、索引的基本概念 索引是在数据库表中用于提高数据检索效率的重要工具。简单来说,索引就像是图书的目录页,可以帮助用户快速定位到所需的信息,而无需逐页查找。对于MySQL而言,所有...
MySQL索引优化是数据库性能提升的关键之一。在深入理解索引优化的过程中,我们需要关注几个核心概念,如索引类型、键长度(key_len)、参考值(ref)以及全表扫描(type=ALL)和文件排序(Using filesort)。 首先...
本资料“Mysql索引优化实战”旨在深入探讨如何通过有效的索引策略提升MySQL数据库的查询性能。 首先,我们需要理解索引的基本概念。在数据库中,索引就像书的目录,它能帮助数据库系统快速定位到数据,而无需遍历...
本资料包"mysql索引优化.rar"聚焦于MySQL的索引优化,旨在帮助你理解和掌握如何有效利用索引来提高数据库的运行效率。以下将详细介绍关于MySQL索引的知识点: 1. **索引类型** - **B-Tree索引**:最常见的索引类型...
在“04-VIP-Mysql索引优化实战一”这个主题中,我们将深入探讨MySQL的索引原理、常见问题以及优化策略。 首先,了解索引的基本概念至关重要。索引是一种特殊的数据结构,用于加速数据检索。在MySQL中,B-Tree是最...
【MySQL索引优化详解】 MySQL索引优化是提升数据库性能的关键环节,通过合理设计和使用索引,可以显著加快查询速度,减少数据访问的时间。在MySQL中,索引是一种特殊的数据结构,允许数据库快速找到存储在表中的...
MySQL索引优化是提高数据库查询效率的关键,尤其在大数据量的场景下,合理地创建和使用索引可以显著提升查询速度。本文档主要探讨了如何选择适合的数据类型、选择合适的标识符以及对索引的基本原理和类型进行了介绍...
mysql索引的优化方案技术分享,珍贵资料收藏下
mysql索引优化
### MySQL索引优化实战知识点详解 #### 一、创建示例表 首先,我们通过一个具体的例子来了解MySQL中的索引及其优化方法。在给定的内容中,展示了一个名为`employees`的表的创建语句: ```sql CREATE TABLE `...
本文将围绕“VIP-mysql索引优化实战一(1)1”这个主题,结合给出的示例表`employees`,讨论如何选择合适的索引以及MySQL如何决定使用哪个索引。 首先,我们来看创建的`employees`表结构,包含`id`(主键)、`name`、...