【1】数据库索引

来源:互联网 发布:箪食壶浆以迎将军乎 编辑:程序博客网 时间:2024/06/07 15:16

      因为日常大多是建立在ORM框架下,加上对海量数据的认识并不多,所以索引一直是一个陌生的知识点。话不多说开始总结:

       一、什么是索引?

       索引是对数据库表中一个或多个列的值进行排序的结构,通常在底层使用B树或B+树来实现。关于B树相关知识,July的博客相当详细:

      http://blog.csdn.net/v_JULY_v/article/details/6530142/

      二、没有索引的数据库世界是什么样的?

      假设我们有一张表,里面有10万条数据。如果没有索引,当查找一条数据时就要扫描全表,如果要查找的记录在表的最后一条,那么在没有任何优化下需要进行10^5次I/O。如果使用索引则可以降到log(10^6)级别,效果是显著的。

      三、索引的代价?

     1、建立索引将带来额外的开销,这个开销和所建立的索引复杂度有关。

     2、当数据库进行更新、删除操作等时,也需要对索引进行同步维护,这也是额外的开销。

     3、不恰当的索引并无法对性能带来显著改善。

    四、为什么不用数据文件直接排序建立索引而独立出来?

    1、单个索引可以这么做,但多个索引无法排序(例如学生信息,既根据学号又要根据姓名来排序是不可能的)

    2、索引行一般比数据行要短,当数据更新时候调整索引行的开销比纯数据行更少

    3、综上所述,需要索引文件来保存索引

    五、MySQL中索引分类

   1、普通索引(INDEX)

    这是最基本的索引,没有任何限制。

   2、唯一索引(UNIQUE INDEX)

    索引列的值必须唯一,但允许有空值。

   3、主键索引(PRIMARY KEY)

   是一种特殊的索引,不允许有空值,一般是在建表时同时创建索引。

   4、组合索引

   5、全文索引

   6、外键索引(只有innodb存储引擎才支持)

    六、几个索引原则:

    1、选择用来搜索的作为索引列。例如经常根据身份证号来查询用户,那么应该利用身份证号作为索引。

    2、使用唯一性索引。对于唯一索引的列,索引的效果最好,而具有多个重复值的列,其索引效果最差。

    3、使用短索引。

    4、利用最左前缀。

    5、不要过度索引。

    6、不要在列上进行运算,这将导致索引失效而进行全表扫描

    7、少用like语句操作。例如:like “%aaa%”不会索引,而like"aaa%"可以使用索引

   七、Mysql中可以用EXPLAIN来查看语句执行过程,利于分析和优化

【参考资料】

使用MYSQL索引 

MySQL优化数据库结构

MySQL性能优化的21个最佳实践

理解MySQL——索引与优化

如何创建MySQL索引

数据库索引实现原理

0 0
原创粉丝点击