zoukankan      html  css  js  c++  java
  • 数据库索引-简单了解

    一、什么是索引,为什么要使用索引?

    1.索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构

    2.索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。

    就和汉语字典一样,我们可以按照拼音,部首,笔画等排序的目录(索引),来快速查找到需要的字。

    二、索引的优缺点

    1.最大的优点就是大幅度提高查询效率

    2.缺点:如果要对表进行更改时,数据库不但要保存更改的数据,还要保存索引

    三、索引的分类

    1.普通索引:在任意的字段上创建索引

    2.唯一索引,要求索引的值必须唯一,允许空值

    3.主键索引,在创建表时必须有主键,数据表中默认有主键索引,加速查找+约束(唯一且不为空)

    4.组合索引,就是两个或两个以上的字段的索引

    5.全文索引,用于搜索很长一片文章的时候,效果最好

    四、索引的两个分类

    #我们可以在创建上述索引的时候,为其指定索引类型,分两类

    hash类型的索引:查询单条快,范围查询慢

    btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它)

    #不同的存储引擎支持的索引类型也不一样

    InnoDB 支持事务,支持行级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;

    MyISAM 不支持事务,支持表级别锁定,支持 B-tree、Full-text 等索引,不支持 Hash 索引;

    Memory 不支持事务,支持表级别锁定,支持 B-tree、Hash 等索引,不支持 Full-text 索引;

    NDB 支持事务,支持行级别锁定,支持 Hash 索引,不支持 B-tree、Full-text 等索引;

    Archive 不支持事务,支持表级别锁定,不支持 B-tree、Hash、Full-text 等索引;

    五、索引的创建和删除
    1.在表创建好之后使用

    create index name(索引名) on s1(name); #添加普通索引

    create unique age(索引名) on s1(age);添加唯一索引

    alter table s1(表名) add primary key(id); #添加主键索引,也就是给id字段增加一个主键约束

    create index name(索引名) on s1(id,name); #添加普通联合索引

    2.删除索引

    drop index id on s1;#删除普通索引

    drop index name on s1; #删除联合索引

    drop index age on s1; #删除唯一索引,就和普通索引一样,不用在index前加unique来删,直接就可以删了

    alter table s1 drop primary key; #删除主键(因为它添加的时候是按照alter来增加的,那么我们也用alter来删)

    六、索引使用时应注意的!

    1.只要你创建了索引,在查询时,只要应用了创建了索引的字段,查询时自动调用索引

    2.如果你的查询条件是or的话,如果你or条件中有为添加索引的字段,索引失效

    3.如果你的查询条件是字符串类型,值必须添加引号

    4.如果你的查询条件是!=,普通索引失效

    5.排序条件时,如果索引字段中没有查询的字段,则普通索引无效

    七、什么时候使用索引?

    (1)创建索引时,应该确保索引时应用在SQL查询语句的条件

    (2)创建索引时,如果是blobtext类型,必须指定长度

    (3)可以在创建表时创建索引,也可以在已经创建好的表上创建索引

    (4)一个表中最好不要创建六个以上的索引

    (5)数据量超过300的表应该有索引



     
  • 相关阅读:
    POJ 1611 The Suspects
    POJ 2001 Shortest Prefixes(字典树)
    HDU 1251 统计难题(字典树 裸题 链表做法)
    G++ C++之区别
    PAT 乙级 1013. 数素数 (20)
    PAT 乙级 1012. 数字分类 (20)
    PAT 乙级 1009. 说反话 (20)
    PAT 乙级 1008. 数组元素循环右移问题 (20)
    HDU 6063 17多校3 RXD and math(暴力打表题)
    HDU 6066 17多校3 RXD's date(超水题)
  • 原文地址:https://www.cnblogs.com/cyk2/p/11265701.html
Copyright © 2011-2022 走看看