索引学习

数据库索引详解

  • 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

如何选择合适的列建立索引

  • 从where从句中,group by从句中,order by从句中,on从句中,select列中,还可以建立覆盖索引(也就是指索引包含所有查询的列,直接查索引就可以完成任务的)。
  • 索引字段越小越好,因为mysql存储是以页为单位的,如果从单页中获取更多的结果,减少IO操作,那么就起到了积极的作用。
  • 离散程度越高的列放在联合索引的前面,因为离散度越大的列可选择性越高,可以通过count统计函数查看离散度 离散度: distinct 值越大,唯一值越多,它的离散度越高,可选择性越高。

索引抑制

  • 索引抑制是指特定的关联条件导致一些索引无法使用,从而导致SQL执行计划效率较低。
  • 常见的5种索引抑制情况:
  1. 使用不等于运算符
  2. 使用IS NULL 或 IS NOT NULL
  3. 使用LIKE(不支持左模糊 like '%xx')
  4. 使用函数,如:TRUNC
  5. 关联条件存在隐式转换(不匹配的数据类型)

创建索引的语法

  • 创建一个普通的索引(一个最简单的索引 没有任何限制)
方式1: create index indexname on tableName(columnName(length));
方式2:alter tableName add index [indexName] on (columnName(length));
方式3: create table mytable(id int not null,username varchar(16) not null,
index [indexName](columnName(length)));
  • 删除索引
drop index [indexName] on tableName;
  • 唯一索引(索引列的值必须唯一,但可以为null;如果是多个字段组合索引,那么列值得组合唯一)
方式1:CREATE UNIQUE INDEX indexName ON tableName(columnName(length)) 
方式2:ALTER tableName ADD UNIQUE [indexName] ON (columnName(length)) 
方式3:CREATE TABLE tableName( ID INT NOT NULL, username VARCHAR(16) NOT    
            NULL, UNIQUE [indexName] (columnName(length)) );
  • 主键索引 : primary key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值