Mysql索引
2014-07-30 17:06
561 查看
为什么需要索引(Why is it needed)?
当数据保存在磁盘类存储介质上时,它是作为数据块存放。这些数据块是被当作一个整体来访问的,这样可以保证操作的原子性。硬盘数据块存储结构类似于链表,都包含数据部分,以及一个指向下一个节点(或数据块)的指针,不需要连续存储。记录集只能在某个关键字段上进行排序,所以如果需要在一个无序字段上进行搜索,就要执行一个线性搜索(Linear Search)的过程,平均需要访问N/2的数据块,N是表所占据的数据块数目。如果这个字段是一个非主键字段(也就是说,不包含唯一的访问入口),那么需要在N个数据块上搜索整个表格空间。
但是对于一个有序字段,可以运用二分查找(Binary Search),这样只要访问log2 (N)的数据块。这就是为什么性能能得到本质上的提高。
什么是索引(What is indexing)?
索引是对记录集的多个字段进行排序的方法。在一张表中为一个字段创建一个索引,将创建另外一个数据结构,包含字段数值以及指向相关记录的指针,然后对这个索引结构进行排序,允许在该数据上进行二分法排序。副作用是索引需要额外的磁盘空间,对于MyISAM引擎而言,这些索引是被统一保存在一张表中的,这个文件将很快到达底层文件系统所能够支持的大小限制,如果很多字段都建立了索引的话。
索引的优点:
1.通过创建唯一性索引,可以保证数据库表中每一 行数据的唯一性。可以大大加快数据的检索速度,这也是创建索引 的最主要原因。2
2.可以加速表和表之间的连接,这在实现数据的参 考完整性方面特别有意义。
3.在使用分组和排序子句进行数据检索时,同样可 以显著减少查询中分组和排序的时间。
索引有哪些缺点?
1.创建索引和维护索引要耗费时间,这种时间随着 数据量的增加而增加。
2.除了数据表占数据空间之外,每一个索引还要占 一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。
3.当对表中的数据进行增加、删除和修改的时候, 索引也要动态的维护,这样就降低了数据的维护速度。
建立和使用索引有哪些注意事项:
1、 索引要建立在经常进行select操作的字段上。这是因为,如果这些列很少用到,那么有无索引并不能明显改变查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
2、 索引要建立在值比较唯一的 字段上。这样做才是发挥索引的最大效果。,比如主键的id字段,唯 一的名字name字段等等。如果索引建立在唯一值比较少的字段,比如性别gender字段,寥寥无几的类别字段等,刚索引几乎没有任何意义。
3、 对于那些定义为text、image和bit数据类型的列不应该增加索引。因为这些列的数据量要么相当大,要么取值很少
4、 当修改性能远远大于检索性能时,不应该创建索引。修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。
5、 在WHERE和JOIN中出现的列需要建立索引。
6、 在以通配符% 和_ 开头作查询时,MySQL索引是无效的。但是这样索引是有效的:select * from tbl1 where name like 'xxx%',所以谨慎的写你的SQL是很重要的。
7 、 组合索引,最佳左前缀原则
相关文章推荐
- 网站之MySQL 索引分析和优化
- 详解mysql索引总结----mysql索引类型以及创建
- MySQL索引经验之浅见
- MySQL索引分析和优化
- 边学边用Mysql(2):索引的作用
- MySQL索引长度问题(转)
- mysql表锁、行锁、索引之间暧昧的关系
- 一个mysql表索引被破坏的问题及解决
- 通过实验分析索引对MySQL插入时性能的影响
- 加速动态网站 MySQL索引分析和优化
- MySQL索引经验之浅见
- MySQL索引分析和优化
- MYSQL 降序索引和减轻索引扫描
- MySql 函数索引
- MySQL查找的方式与索引的效率
- MySQL索引分析和优化
- MySQL索引分析和优化
- 在MySQL中创建索引
- Mysql建立索引,找出重复纪录,删除重复的纪录,ultraedit使用小技巧
- MySQL索引分析和优化