论MySQL何时使用索引,何时不使用索引
http://database.51cto.com/art/201108/281684.htm
索引:
使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。
在数据库关系图中,您可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。
注意:
并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处。但是,如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。
可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。
如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。
确定索引的有效性:
- 检查查询的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象。
- 对新索引进行试验以检查它对运行查询性能的影响。
- 考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。
- 检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。
- 检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型。
MySQL何时使用索引
对一个键码使用>, >=, =, <, <=, IF NULL和BETWEEN
- SELECT * FROM table_name WHERE key_part1=1 and key_part2 > 5;
- SELECT * FROM table_name WHERE key_part1 IS NULL;
当使用不以通配符开始的LIKE
- SELECT * FROM table_name WHERE key_part1 LIKE 'jani%'
在进行联结时从另一个表中提取行时
- SELECT * from t1,t2 where t1.col=t2.key_part
找出指定索引的MAX()或MIN()值
- SELECT MIN(key_part2),MAX(key_part2) FROM table_name where key_part1=10
一个键码的前缀使用ORDER BY或GROUP BY
- SELECT * FROM foo ORDER BY key_part1,key_part2,key_part3
在所有用在查询中的列是键码的一部分时间
- SELECT key_part3 FROM table_name WHERE key_part1=1
MySQL何时不使用索引
如果MySQL能估计出它将可能比扫描整张表还要快时,则不使用索引。例如如果key_part1均匀分布在1和100之间,下列查询中使用索引就不是很好:
- SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90
如果使用HEAP表且不用=搜索所有键码部分。
在HEAP表上使用ORDER BY。
如果不是用键码第一部分
- SELECT * FROM table_name WHERE key_part2=1
如果使用以一个通配符开始的LIKE
- SELECT * FROM table_name WHERE key_part1 LIKE '%jani%'
搜索一个索引而在另一个索引上做ORDER BY
- SELECT * from table_name WHERE key_part1 = # ORDER BY key2
发表评论
-
Android中SQLiteOpenHelper类的onUpgrade方法的作用
2012-02-09 11:50 4601Android中SQLiteOpenHelper类的onUpg ... -
在线升级Android应用程序的思路
2012-02-07 11:34 880在线升级Android应用程序的思路 http://www. ... -
Android数据库内容变化的监听
2012-02-07 11:31 6033Android数据库内容变化的监听 首先介绍内容监 ... -
android中的数据库操作
2012-02-07 10:50 1451android中的数据库操作 ... -
SQLiteOpenHelper类与自动升级数据库
2012-02-07 10:31 2283SQLiteOpenHelper类与自动升级数据库 S ... -
SQLite外键的实现
2012-02-07 10:30 1717SQLite外键的实现 SQLite现在的版本还不支持 ... -
29日修改数据库设计
2012-01-29 15:24 0数据表设计: 账号信息表account ... -
最新数据库设计
2012-01-28 21:21 0数据表设计: 工资管理 账号信息表Acc ... -
数据库设计
2012-01-11 15:27 0数据库设计 信息表:infotypecreate ta ... -
cmd下操作mysql
2011-12-20 14:11 986cmd下操作mysql 连接mysql服务器 mysql ... -
你能说出SQL聚集索引和非聚集索引的区别吗?
2011-12-07 15:18 0你能说出SQL聚集索引和非聚集索引的区别吗? http ... -
打造自己的数据访问层
2011-12-07 15:01 1287打造自己的数据访问层 http://database. ... -
MySQL数据库新特性之存储过程入门教程
2011-12-07 14:38 893MySQL数据库新特性之存储过程入门教程 http:/ ... -
详细讲解如何将数据模型转换成数据库设计
2011-12-07 12:42 1120详细讲解如何将数据模 ... -
讲解SQL与Oracle外键约束中的级联删除
2011-12-07 12:33 0讲解SQL与Oracle外键约束中的级联删除 当代 ... -
SQLite-CREATE TRIGGER
2011-12-07 09:07 1369SQLite-CREATE TRIGGER http: ... -
主键与外键的关系、级联保存、更新、删除
2011-12-06 14:16 7248主键与外键的关系、级联保存、更新、删除 http://www ... -
MySQL 数据类型
2011-12-06 10:18 792MySQL 数据类型 数值类型 MySQL 的数 ... -
MyISAM InnoDB 区别
2011-12-02 17:03 767MyISAM InnoDB 区别 http://www.ph ... -
事务的原理
2011-12-02 17:01 1270(1):事务(Transaction)是 ...
相关推荐
MySQL何时使用索引,何时不使用索引,归纳的还算详细,可以看看。
MySQL 的索引分为两种主要类型:MyISAM 使用非聚集索引,索引与数据分开存储,而 InnoDB 使用聚集索引,索引和数据在同一结构中,因此 InnoDB 的索引支持更快的查找,但不支持全文检索。在索引优化方面,最左前缀...
【MySQL索引 使用笔记】 MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的...
MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。
### MySQL Innodb 索引原理详解 #### 1. 各种树形结构 在深入探讨MySQL Innodb索引之前,我们先了解几种基本的树形数据结构,包括二叉搜索树、B树、B+树以及B*树。 ##### 1.1 搜索二叉树(Binary Search Tree) ...
##### 何时使用索引 - 主键自动建立唯一索引。 - 经常出现在WHERE或ORDER BY语句中的列。 - 用于排序的列。 - 查询中与其他表关联的字段。 - 高并发环境下倾向于使用组合索引。 - 聚合函数的列(例如使用MAX(column_...
mysql查询,通过explain 分析,没有利用到索引,查询效率不高等出现的问题。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到...
本文将深入探讨MySQL索引的最佳实践,旨在为开发者和数据库管理员提供实用指南。 ### 理解索引的重要性 索引的存在主要是为了加速数据库中的数据访问速度。在没有索引的情况下,数据库必须遍历整个表来查找特定的...
### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...
一、MySQL索引 1. 索引类型:MySQL支持多种索引类型,包括B-Tree(默认索引类型)、Hash、Full-text(全文索引)以及R-tree(空间数据索引)。B-Tree索引适用于范围查询,而Hash索引适用于等值查询,Full-text索引...
MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...
总之,MySQL索引优化是一项涉及广泛的知识,包括但不限于索引类型选择、索引维护、存储过程和触发器的合理运用。通过深入学习和实践,我们可以有效地提升数据库的运行效率,确保系统的稳定和快速响应。这个课件...
MySQL 索引类型大汇总 MySQL 索引类型是数据库性能优化的关键所在。索引可以大幅度提高查询速度,提高数据库的...索引是 MySQL 数据库性能优化的关键所在,合理的使用索引可以提高查询速度,提高数据库的高效运行。
首先,让我们了解什么是MySQL索引。MySQL中的索引是一种特殊的数据结构,它为数据库表中的数据提供了快速访问的途径。常见的索引类型包括B-Tree(默认)、Hash、R-Tree和Full-text等。B-Tree索引是最常见的一种,...
### MySQL的索引优化 ...通过上述内容可以看出,合理使用和优化MySQL索引对于提升数据库性能至关重要。开发者应该根据具体的应用场景来选择合适的索引策略,并定期评估和调整索引设置,以确保系统的高效运行。
**MySQL数据库索引概述** 索引是数据库管理系统中不可或缺的一部分,尤其在处理大规模数据时,它的存在极大地提高了数据检索的效率。在MySQL中,索引是一个独立的、物理的数据库结构,它由表中一列或多列的集合以及...