数据库索引

2019-12-25  本文已影响0人  ycyoes

定义

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

索引操作

创建索引

CREATE INDEX indexName ON mytable(username(length)); 

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

创建表时直接指定

CREATE TABLE mytable(  
 
    ID INT NOT NULL,   
 
    username VARCHAR(16) NOT NULL,  
 
    INDEX [indexName] (username(length))  
 
);  

在已有表中添加索引

ALTER TABLE my_table ADD [UNIQUE] INDEX index_name(column_name);
或者
CREATE INDEX index_name ON my_table(column_name);

注意:

删除索引

drop index_name on tablename;

alter TABLE tablename  drop index  name_index ;

查看索引

SHOW INDEX FROM tablename;

查看查询语句使用索引的情况

//explain 加查询语句
explain SELECT * FROM table_name WHERE column_1='123';

索引分类

主键索引

即主索引,根据主键pk_clolum(length)建立索引,不允许重复,不允许空值

普通索引

仅加速查询 最基本的索引,没有任何限制,是我们大多数情况下使用到的索引。

唯一索引

与普通索引类型不同的是:索引列的值必须唯一,但允许有空值(可以有null)。如果是组合索引,则列值的组合必须唯一。

CREATE UNIQUE INDEX indexName ON mytable(username(length)) 

全文索引

全文索引(FULLTEXT)仅可以适用于MyISAM引擎的数据表;作用于CHAR、VARCHAR、TEXT数据类型的列。

组合索引

将几个列作为一条索引进行检索,使用最左匹配原则。

索引优缺点

优点

缺点

什么场景不适合创建索引

索引失效条件

建议

组合索引示例

建立的组合索引顺序:(a,b,c,d,e,f)
1、如果组合索引中的索引都在,则索引全部生效
2、如果组合索引中最左边的索引a不存在,那么索引都不生效
3、如果组合索引中最左边的索引a存在但没有使用全部的索引。首先按照建立索引的顺序排好,从a开始往后判断是否具有连续性(依据建立索引的顺序),如果直至最后都具有连续性,那么这些索引生效。如果在下一个节点处的索引连续性断掉,那么当前节点的索引和左边的索引生效。当前节点右边的索引不生效

对于第三种情况举个例子:

... where a =1,b=2,c=3,d=4,f=6 则当前节点的索引的是 d , 所以索引 d和之前的索引生效,d之后的索引 f 不生效。
连续性断掉:
1、e不存在;
2、当前节点d使用的范围条件 如b>2

参考资料:

  1. https://blog.csdn.net/qq_39678382/article/details/88640556
  2. https://blog.csdn.net/qq_35275233/article/details/87888809
  3. https://blog.csdn.net/weixin_39355279/article/details/88827640
  4. https://www.jianshu.com/p/40edfbb50046
  5. https://www.cnblogs.com/sunada2005/p/4715366.html
上一篇 下一篇

猜你喜欢

热点阅读