您的位置:首页 > 数据库

[数据库]索引的建立

2016-06-02 20:59 330 查看
        由于没有学过数据库这门课,所以使用的时候很多概念都不知道,前段时间学长让我学习一下索引相关的知识,因为面试的时候会经常问道,而且当时项目也确实用到了这个问题,在此简单记录一下,以后再慢慢学习慢慢整理。

        我理解的数据库索引就是用空间换取时间,如果没有索引,查找数据库中某个字段的时候就会进行顺序查找直到找到符合条件的数据,如果数据量非常庞大的话,这个开销肯定是非常恐怖的,所以在某个经常进行查找排序等操作的字段上建立索引,一般都是B树或者哈希索引,这样会额外建立一个数据结构以使得改字段呈某种规律被持有,在查找的时候就能快速被找到,但是这个额外的数据结构肯定也需要维护。以上完全是个人理解,不一定保证正确。

一、基本操作

        1、查看索引

mysql> show index from tblname;
        其中的tbname为表的名称,比如我的数据库中news_table是一个用于存储新闻的表,其中的新闻地址会经常被查找,所以在该字段建立了索引,使用上述命令就可以看见在news_table中有几个索引,还可以看出索引的类型,下面显示的是BTREE。



        关于各个参数的意义有详细的介绍:(参考地址:点击打开链接

· Table

        表的名称。

· Non_unique

        如果索引不能包括重复词,则为0。如果可以,则为1。

· Key_name

        索引的名称。

· Seq_in_index

        索引中的列序列号,从1开始。

· Column_name

        列名称。

· Collation

        列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。

· Cardinality

        索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机 会就越大。

· Sub_part

        如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。

· Packed

        指示关键字如何被压缩。如果没有被压缩,则为NULL。

· Null

        如果列含有NULL,则含有YES。如果没有,则该列含有NO。

· Index_type

        用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。

        2、建立索引

CREATE INDEX index_name ON table(column(length))
        由于接触的不是很深入,我直接创建了索引,没有指定length。

       ·  index_name表示索引的名称,就是上面说到的Key_name。

      ·  table表示列所在的表,对应上面的Table。

      ·
column表示列名称,对应上面的Column_name。

CREATE INDEX address_index ON news_table(news_address);




        刚开始的时候每次创建索引都会导致数据库直接崩溃,可能是因为主机没有配置环境变量,后来在主机配置环境变量后,就创建成功了。

        3、删除索引

DROP INDEX index_name ON table
        

        ·  index_name表示索引的名称,就是上面说到的Key_name。

      ·  table表示列所在的表,对应上面的Table。

DROP INDEX address_index ON news_table;




      

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: