sql 索引基础

(一).什么是索引

          Mysql官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构. 可以简单理解为'排好序的快速查找的数据结构"


    一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。

    我们平常所说的索引,如果没有特别说吗,都是B树(多路搜索树,不一定是二叉树)结构的索引。其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。当然除了B+树这种类型的索引之外,还有哈希索引等。

  

(二).索引的优势

        类似大学图书馆建书目索引,提高数据的检索效率,降低数据库的IO成本。

        通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

(三).索引的劣势

        实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用空间。

        虽然索引大大提高了查询速度,同时却会降低更新表的速度,如insert ,update,delete.

 因为更新表时,mysql不仅仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新带来的键值变化后的索引信息。(比如说一本书从1号楼换到了2号楼,那么指向这本书的索引信息也要修改)


(四).索引的分类

    单值索引:即一个索引包含了单个列,一个表可以有多个单列索引。

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

    复合索引:即一个索引包含多个列

    基本语法:

    创建:

1.   create [unique] index indexName on mytable(columname(length));

CREATE TABLE 表名( 属性名 数据类型[完整性约束条件], 
属性名 数据类型[完整性约束条件], 
...... 
属性名 数据类型 
[ UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY 
[ 别名] ( 属性名1 [(长度)] [ ASC | DESC] ) 
);

    其中,UNIQUE是可选参数,表示索引为唯一性索引FULLTEXT是可选参数,表示索引为全文索引SPATIAL也是可选参数,表示索引为空间索引INDEX和KEY参数用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的;"别名"是可选参数,用来给创建的索引取的新名称;"属性1"参数指定索引对应的字段的名称,该字段必须为前面定义好的字段;"长度"是可选参数,其指索引的长度,必须是字符串类型才可以使用;"ASC"和"DESC"都是可选参数,"ASC"参数表示升序排列,"DESC"参数表示降序排列。

    小例子

CREATE TABLE `hc_project_vote` (
`rcd_id` INT (11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`create_time` datetime COMMENT '创建时间',
`update_time` datetime COMMENT '更新时间',
`sn` VARCHAR (30) DEFAULT '' COMMENT 'sn',
`project_sn` VARCHAR (30) DEFAULT '' COMMENT '项目sn',
`user_sn` VARCHAR (30) DEFAULT '' COMMENT '投票者sn',
`vote_time` datetime COMMENT '投票时间',
`visit_ip` VARCHAR (15) DEFAULT '' COMMENT '投票者ip',
PRIMARY KEY (`rcd_id`),
KEY `idx_hc_vote_project_sn` (`project_sn`) USING BTREE,
KEY `idx_hc_vote_user_sn` (`user_sn`) USING BTREE
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '项目投票记录表'; 

2.  alter mytable add [unique] index [indexName]  on  (columname(length));

    删除:  drop index [indexName] on mytable;

    查看:     show index from mytable


检索原理



需要建立索引的情况

不需要建立索引的情况

Mysql常见瓶颈




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值