`
geeksun
  • 浏览: 965043 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySql 索引优化

 
阅读更多

索引的类型

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 ……;

分享到:
评论

相关推荐

    04-VIP-Mysql索引优化实战一.pdf

    MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...

    MySQL索引优化课件

    MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...

    mysql索引优化分享

    关于mysql索引一些优化介绍与创建原则,还有对order by排序的算法的介绍等等

    Mysql索引优化案例.pdf

    Mysql索引优化案例 在对数据库进行操作时,尤其是在处理包含大量数据的表时,查询的性能问题是一个常见且重要的话题。在实际工作中,对于Mysql数据库进行索引优化是提高查询效率、减少查询时间的重要手段。本案例将...

    Mysql索引优化解决方案.doc

    "Mysql索引优化解决方案" MySQL索引是帮助MySQL高效获取数据的数据结构。MySQL在存储数据之外,还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据,这样我们就可以通过数据结构上实现...

    mysql索引优化.xmind

    mysql索引优化思维导图

    mysql的索引优化

    ### MySQL的索引优化 #### 一、索引的基本概念 索引是在数据库表中用于提高数据检索效率的重要工具。简单来说,索引就像是图书的目录页,可以帮助用户快速定位到所需的信息,而无需逐页查找。对于MySQL而言,所有...

    mysql索引优化深入1

    MySQL索引优化是数据库性能提升的关键之一。在深入理解索引优化的过程中,我们需要关注几个核心概念,如索引类型、键长度(key_len)、参考值(ref)以及全表扫描(type=ALL)和文件排序(Using filesort)。 首先...

    Mysql索引优化实战.zip

    本资料“Mysql索引优化实战”旨在深入探讨如何通过有效的索引策略提升MySQL数据库的查询性能。 首先,我们需要理解索引的基本概念。在数据库中,索引就像书的目录,它能帮助数据库系统快速定位到数据,而无需遍历...

    mysql索引优化.rar

    本资料包"mysql索引优化.rar"聚焦于MySQL的索引优化,旨在帮助你理解和掌握如何有效利用索引来提高数据库的运行效率。以下将详细介绍关于MySQL索引的知识点: 1. **索引类型** - **B-Tree索引**:最常见的索引类型...

    04-VIP-Mysql索引优化实战一.zip

    在“04-VIP-Mysql索引优化实战一”这个主题中,我们将深入探讨MySQL的索引原理、常见问题以及优化策略。 首先,了解索引的基本概念至关重要。索引是一种特殊的数据结构,用于加速数据检索。在MySQL中,B-Tree是最...

    mysql索引优化学习讲义以及示例

    【MySQL索引优化详解】 MySQL索引优化是提升数据库性能的关键环节,通过合理设计和使用索引,可以显著加快查询速度,减少数据访问的时间。在MySQL中,索引是一种特殊的数据结构,允许数据库快速找到存储在表中的...

    MYSQL索引优化.docx

    MySQL索引优化是提高数据库查询效率的关键,尤其在大数据量的场景下,合理地创建和使用索引可以显著提升查询速度。本文档主要探讨了如何选择适合的数据类型、选择合适的标识符以及对索引的基本原理和类型进行了介绍...

    mysql索引优化方案技术分享

    mysql索引的优化方案技术分享,珍贵资料收藏下

    mysql索引优化

    mysql索引优化

    VIP-mysql索引优化实战一.pdf

    ### MySQL索引优化实战知识点详解 #### 一、创建示例表 首先,我们通过一个具体的例子来了解MySQL中的索引及其优化方法。在给定的内容中,展示了一个名为`employees`的表的创建语句: ```sql CREATE TABLE `...

    VIP-mysql索引优化实战一(1)1

    本文将围绕“VIP-mysql索引优化实战一(1)1”这个主题,结合给出的示例表`employees`,讨论如何选择合适的索引以及MySQL如何决定使用哪个索引。 首先,我们来看创建的`employees`表结构,包含`id`(主键)、`name`、...

Global site tag (gtag.js) - Google Analytics