数据库--索引
索引
(1)索引的概念:索引是数据库帮助数据库获取数据的数据结构,好比书的目录,加快数据库的查询速度。
(2)索引的分类:
①主键索引PRIMARY KEY:它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。注意:一个表只能有一个主键
②唯一索引UNIQUE:唯一索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。可以通过ALTER TABLE table_name ADD UNIQUE (column)
③普通索引 INDEX:这是最基本的索引,它没有任何限制
④组合索引,指多个字段创建的索引,只有在查询条件中使用了创建索引的第一个字段,索引才会被使用
⑤上述几种可能在不同数据里叫法不一样,但是原理基本都是一样的
(3)索引的作用:加快数据的查找速度,提高数据库的性能
(4)索引常识:
①索引是越多越好吗?每张表都必须加索引吗?
答:索引会占储存空间,使用错误的索引使用不当不仅不会提高系统性能还会造成资源浪费。不是每张表都需要加索引的,比如我们有一些表就几十条甚至几条数据直接查询的速度非常快,使用索引完全没有必要。所以不是索引越多越好也不是每张表都需要加索引
②怎么增加索引?
答:增加索引有2种办法,第一种在数据库的可视化界面找到对应需要加索引的表,点击展开,可以看到索引的项--右键新增索引--在弹出的界面输入索引的名称、选择是否唯一、选择是否聚合或是非聚合(聚合也叫组合)--添加需要添加索引的字段
第二种用语句增加索引:
CREATE INDEX 索引名 ON 表名(列名1,列名2,…),列如:CREATE INDEX name_index ON index_table(name),此为在index_table表上的name列上创建一个索引name_index
也可以通过修改表来进行创建索引,语法为:ALTER TABLE tablename ADD INDEX [索引的名字] (列i列表)
③我们建好索引以后需要我们操作吗?
答:不需要,我们在表上把索引加上,至于怎么提高查询的效率,这就不是我们关心的了,数据库系统会在我们查询时自动使用索引的,具体怎么操作的网上有很多的文章可以看看,因表数据大而查询慢时我们就可以加上索引,然后什么二分法查数据啥的就交给数据库了,你只要正确的建了表索引,数据库查询时就会自动使用
④什么叫做重建索引
答:在我理解来看,其实我们创建的索引就是一物理键,我们创建在表上的索引,最终会同时存在在另一张表(索引表)上,而索引表和数据的物理地址相关联,这大概就是索引的本质,所谓的索引重建并不是重建我们添加到表上的索引,而是重新分配计算我们的索引表,将多余的索引碎片清理、整理,从而提高索引的执行效率(个人理解,不代表啥)
⑤索引会不会失效
答:索引在某些情况是会失效的,对于创建的组合索引,不是使用的第一部分就不会使用索引,比如我们给A、B2列加上了索引(注意顺序先A后B),select * from XX where B=YY,这样索引是不会生效的,但是如果为select * from XX where A=YY 这样索引就会生效,一般来说where中存在A数据库就会启用索引,哪怕是where B=YY AND A=ZZ,这样也会生效,因为数据会将这个写法改为where A=ZZ AND B=YY。其次就是对于like查询,以aaa%查询索引生效的,但是%aaa索引不生效的,最后是在where条件中使用or连接关键字、is null 、is not null以及in、not in等等都会让索引失效(因为会进行全表扫描,索引不起作用)