数据库索引原理实例

Posted sxdtzhp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库索引原理实例相关的知识,希望对你有一定的参考价值。

create table t1
(
  c1 varchar2(10),
  c2 varchar2(20),
  n1 number(10,0),
  d1 date
);
alter table T1 add constraint pk_t1 primary key (C1);
create index idx_t1_n1_c2 on T1 (n1, c2);
create index idx_t1_d1 on T1 (d1);

select * from t1 where c1='1’;  --使用索引pk_t1
select * from t1 where c1=1;      --未使用索引,做了隐式转换,相当于where to_number(c1)=1
select * from t1 where c2='1’; --未使用索引,因c2是索引的第2个字段
create index idx_t1_n1 on T1 (n1); --重复索引,与idx_t1_n1_c2重复
select * from t1 where d1=to_date('2020-10','yyyy-mm'); --使用索引idx_t1_d1
select * from t1 where to_char(d1,'yyyymmdd’)='20201002’; --未使用索引,不存在to_char(d1,'yyyymmdd’)的函数索引
解决办法:改为d1 between to_date('20200102 00:00:00','yyyymmdd hh24:mi:ss') and to_date('20200102 23:59:59','yyyymmdd hh24:mi:ss')
也可以执行create index idx_t1_tochard1 on T1 (to_char(d1,'yyyymmdd'));后上一句可以使用到索引idx_t1_tochard1。
select * from t1 where to_char(d1,'YYYYMMDD’)='20201002’;     --未使用索引,函数中大小写不相同
select * from t1 where to_char(d1,'yyyy-mm-dd’)='2020-10-02’; --未使用索引,函数不相同

select * from t1 where n1 is null;    --未使用索引,is null无法使用到索引
select * from t1 where n1 is not null; --未使用索引,is not null无法使用到索引
解决办法: alter table T1 modify n1 default 0 not null;   查询时n1 is null改为n1=0

select * from t1 where c1 like '张%'; --使用索引pk_t1
select * from t1 where c1 like '%张'; --未使用索引

以上是关于数据库索引原理实例的主要内容,如果未能解决你的问题,请参考以下文章

ES的分布式架构原理(ES如何实现分布式)

mysql数据库怎么建索引?

es分布式架构原理

InnoDB索引查询原理

「Mysql索引原理(七)」覆盖索引

mongodb的索引btree特点与原理