感悟:
索引这个东西真的是很抽象, 刚开始很不理解, 就像我刚开始接触 AJAX 一样不过你接触之后发现, 真的没那么难
--
真的写的很好: http://www.cnblogs.com/whgk/p/6179612.html
--
一: 索引是什么? 建立索引的目的?
数据库里的数据其实也是以文件的形式存储的, 就像一本书一样里面放了我们的各种数据索引就像一个书签一样, 可以直接帮我们找到内容, 避免了我们一页一页找
这样的话, 会节省很大时间
假如有一个 2w 的数据表, 如果没有索引, 那数据库一条条遍历查找, 那如果数据更多呢?
如果有了索引, 那么会将需要查询的字段, 通过一定的方法进行存储, 好让查询该字段上的信息时, 能够快速找到对应的数据, 而不必在遍历 2W 条数据了
其中 MySQL 中的索引的存储类型有两种: BTREEHASH 也就是用树或者 Hash 值来存储该字段, 要知道其中详细是如何查找的, 就需要会算法的知识了我们现在只需要知道索引的作用, 功能是什么就行
--
二: MySQL 中索引的优点和缺点和使用原则
优点:
极大的加快查询速度
缺点:
摘自文章
1 创建索引和维护索引要耗费时间, 并且随着数据量的增加所耗费的时间也会增加
2 索引也需要占空间, 我们知道数据表中的数据也会有最大上线设置的, 如果我们有大量的索引, 索引文件可能会比数据文件更快达到上线值
3 当对表中的数据进行增加删除修改时, 索引也需要动态的维护, 降低了数据的维护速度
使用原则:
摘自文章
通过上面说的优点和缺点, 我们应该可以知道, 并不是每个字段度设置索引就好, 也不是索引越多越好, 而是需要自己合理的使用
1 对经常更新的表就避免对其进行过多的索引, 对经常用于查询的字段应该创建索引,
2 数据量小的表最好不要使用索引, 因为由于数据较少, 可能查询全部数据花费的时间比遍历索引的时间还要短, 索引就可能不会产生优化效果
3 在一同值少的列上 (字段上) 不要建立索引, 比如在学生表的 "性别" 字段上只有男, 女两个不同值相反的, 在一个字段上不同值较多可是建立索引
--
三: 索引类型
- mysql> desc book;
- +------------------+--------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +------------------+--------------+------+-----+---------+-------+
- | bookid | int(11) | NO | | NULL | |
- | bookname | varchar(255) | NO | | NULL | |
- | authors | varchar(255) | NO | | NULL | |
- | info | varchar(255) | YES | | NULL | |
- | comment | varchar(255) | YES | | NULL | |
- | year_publication | year(4) | NO | | NULL | |
- +------------------+--------------+------+-----+---------+-------+
- 6 rows in set (0.00 sec)
- mysql> SHOW INDEX FROM book \G;;
- *************************** 1. row ***************************
- Table: book
- Non_unique: 1
- Key_name: BkBookNameIdx
- Seq_in_index: 1
- Column_name: bookname
- Collation: A
- Cardinality: 0
- Sub_part: NULL
- Packed: NULL
- Null:
- Index_type: BTREE
- Comment:
- Index_comment:
- 1 row in set (0.00 sec)
- --
- mysql> SHOW INDEX FROM book \G;
- *************************** 1. row ***************************
- Table: book
- Non_unique: 0
- Key_name: bookid
- Seq_in_index: 1
- Column_name: bookid
- Collation: A
- Cardinality: 0
- Sub_part: NULL
- Packed: NULL
- Null:
- Index_type: BTREE
- Comment:
- Index_comment:
- --
- mysql> ALTER TABLE `book` ADD PRIMARY KEY ( `bookid` ) ;
- --
- CREATE INDEX bookidaAS ON book(authors,bookid);
- --
- http://blog.sina.com.cn/s/blog_ae1611930101a063.html
- --
来源: http://www.bubuko.com/infodetail-2544238.html