数据库索引

数据库索引的简单例子:

create table stu
(
    id     int         AUTO_INCREMENT    not null comment '学号',
    name   varchar(20) DEFAULT ' '       not null comment '姓名',
    sex    varchar(2)  DEFAULT '男'      not null comment '性别',
    age    int         DEFAULT 10        not null comment '年龄',

    primary key(id),

    key 'idx' (id,name,sex)
) engine=innoDB default charset=utf8 comment='学生信息'

select * from stu where id=10        --    使用了索引
select * from stu where name='张三' and sex='男'        --不适用索引
select * from stu where name='张三' and id=10        --使用了索引
select * from stu where id>10 and name='张三'        --只有id走索引, 范围字段会结束索引对范围后面索引字段的使用

数据库的索引:

  •         聚集索引(主键索引):在数据库里面,所有的行数都会按照主键索引进行排序
  •         非聚集索引:给普通字段加上索引。
  •         联合索引:好几个字段组成的索引。

联合索引的最左前缀原则

        在上述索引中,id 位于最左边,所以搜索条件中出现 id 则满足。

        注意这里说的满足是满足最左前缀原则,当有索引最左边的 id 出现在条件中,mysql内部会自动调整 id 在最左边并执行。

--创建索引
--1. 可以在创建表的时候直接指定
--2. create index

--创建简单索引
create index index_name on table_stu(id)
--创建联合索引
create index index_name on table_stu(id,name)
--创建唯一索引
create unique index index_name on table_stu(id)

--查看某张表的所有索引
select * from all_ind_columns where table_name='表名'

--删除索引
drop index 索引名称
drop index 索引名称 on 表名

1. 索引的概念:

        一种帮助系统能更快查找数据的数据结构。

2. 索引的作用:

  •         数据库利用各种快速定位技术、能够大大加快查询速度。这是创建索引的主要原因。
  •         当表很大 或者 设计多个表的数据查询, 使用索引可以成千上万倍提高查询速度。
  •         可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。
  •         通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。
  •         可以加快表与表之间的连接。
  •         在使用分组和排序时,大大减少分组和排序的时间。
  •         建立索引在搜索和恢复数据库中的数据时能显著提高性能。

3. 索引的缺点:

  •         索引需要占用额外的磁盘空间。
  •         进行增删改数据的时候会花费更多的时间,这是由于索引本身也需要更新。

仅经常被搜索的列(以及表)上面建立索引

4. 创建索引的原则:

        表的主键、外键必须有索引。主键有唯一性,外键关联的是主表的主键,查询时可以快速定位。

        记录数超过300行的表应该有索引。如果没有索引,每次查询都需要把表遍历一遍,会严重影响数据库的性能。

        经常与其他表进行连接的表,连接字段上应该建立索引。

        唯一性太差的字段不适合建立索引。

        更新太频繁的字段不适合建立索引。

        经常出现在where 子句中的字段,特别是大表的字段,应该建立索引。

        经常使用group by 、order by 的字段应该建立索引。

        索引应该建立在选择性高的字段上。

        索引应该建立在小字段上,对于大的文本字段、甚至是超长字段,不要建立索引。

5. 什么情况适合创建索引

        小字段

        唯一性强的字段

        更新不频繁,但是查询频繁的字段

        表记录超过300行

        主键、外键、唯一键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值