美文网首页
数据库 索引

数据库 索引

作者: 恬恬i阿萌妹O_o | 来源:发表于2018-08-20 08:31 被阅读0次

1.索引:加快查找,可以理解为创建了一个索引目录
每次查找会在目录中找到位置.(例子:字典)
目的:
  约束(主键、唯一约束)
  加速查找
分类:
  主键索引:
  唯一索引:
  普通索引:
  联合索引(多列组合成的):顺序(最左前缀匹配)
      普通的列组成 index 索引名称 (列1,列2,列3)
      主键联合索引 primary key(列1,列2,...)
唯一联合索引 unique key(列1,列2)
在已经存在的表中添加索引:
ALTER TABLE tablename ADD primary key()
ALTER TABLE tablename ADD unique key()
添加普通索引:
 create index 索引名称 on tablename(列,..)
添加一个唯一索引
 create unique index 索引名称 on tablename(列,..)
删除索引:
 drop index 索引名称 on tablename
drop unique index 索引名称 on tablename
如何修改索引名称??????
对于MySQL 5.7及以上版本,可以执行以下命令
ALTER TABLE tbl_name RENAME INDEX old_index_name TO new_index_name
对于MySQL 5.7以前的版本,可以执行下面两个命令(先删除再添加):
ALTER TABLE tbl_name DROP INDEX old_index_name
ALTER TABLE tbl_name ADD INDEX new_index_name(column_name)
索引根据搜索引擎分类:
设置索引:
  会额外生成一个数据文件(索引文件)
  快
不设置子索引的区别:
  从上网下依次查找
 (慢)
hash 索引:MEMARY存储引擎
  索引表()
  根据索引列生成一个hash值,并且记录当前列在表中的地址
  这个hash表的索引存储顺序跟我们的表的顺序不一致
  查询单个数据较快。
btree 索引:(二叉树算法):几乎支持所有的存储的引擎
  查找速度相对快
两个名称的概念:
覆盖索引:直接从索引文件中拿出对应的值,不再表中查找。
这里(name、age都是索引列)
select name,age from tablename where name='张三' and age=60
索引的合并:
name、email、phonenum
select * from tablename where name='值' and email='值'

注意:

创建索引的时候要了解的知识:
1.创建一个索引,提高了查找效率但是,牺牲了增、删、改效率
2.会加大磁盘空间的开销
3.设置最短索引
create index indeaname on tablename(列(16)))
4.命中索引:
1.like '%xx' select * from tb1 where email like '%cn';
2.使用函数 select * from tb1 where reverse(email) = 'wupeiqi';
3.or select * from tb1 where nid = 1 or name = 'seven@live.com';
特别的:当or条件中有未建立索引的列才失效,以下会走索引 select * from tb1 where nid = 1 or name = 'seven'; select * from tb1 where nid = 1 or name = 'seven@live.com' and email = 'alex'
5.类型不一致 如果列是字符串类型,传入条件是必须用引号引起来,不然... select * from tb1 where email = 999;
6.!= select * from tb1 where email != 'alex'
特别的:如果是主键,则还是会走索引 select * from tb1 where nid != 123
7.select * from tb1 where email > 'alex'
特别的:如果是主键或索引是整数类型,则还是会走索引 select * from tb1 where nid > 123 select * from tb1 where num > 123
8.order by select name from tb1 order by email desc;
当根据索引排序时候,选择的映射如果不是索引,则不走索引 特别的:如果对主键排序,则还是走索引: select * from tb1 order by nid desc;
9.组合索引最左前缀 如果组合索引为:(name,email) name and email -- 使用索引 name -- 使用索引 email -- 不使用索引
索引选择原则
较频繁的作为查询条件的字段应该创建索引
唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
更新非常频繁的字段不适合创建索引
不会出现在 WHERE 子句中的字段不该创建索引
例子:百万用户数据,建立索引查询,比较建立索引查询的优势

相关文章

  • 数据库索引记录

    本文用来记录数据库索引相关内容; 1】数据库索引分为单列索引,组合索引,全文索引,空间索引 2】单列索引:只有一个...

  • 索引,序列,视图

    1、数据库索引索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果...

  • Sql索引优化—转载

    数据库索引使用方式 使用索引是提高数据库查询效率的主要方式,下面从索引结构,索引类型,索引操作,命中索引几个方面来...

  • 数据库 - 索引

    索引 索引 索引的建立对于数据库的高效运行是很重要的。索引可以大大提高数据库的检索速度。 索引分单列索引,组合索引...

  • [Mysql]Mysql索引实现原理及相关优化策略

    数据库索引 数据库索引是什么? A database index is a data structure that...

  • 数据库索引定义和类型

    数据库索引类型及实现方式 1、索引定义 数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引是对数据库表...

  • 数据库索引结构总结

    [TOC] 参考 数据库索引数据结构总结 本文摘抄自数据库索引数据结构总结 1. 摘要 数据库索引是数据库中最重要...

  • MySQL 索引

    MySQL 索引 数据库索引的原理:数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表...

  • 『数据库』索引的工作原理

    数据库索引能够提高数据库的查询效率,那么索引到底是什么。 什么是索引 索引本身这个名字已经能回答这个问题了,索引就...

  • PostgreSQL基础知识--索引

    索引是增强数据库性能的常用方法。索引使得数据库在查找和检索数据库的特定行的时候比没有索引快得多。但索引页增加了整个...

网友评论

      本文标题:数据库 索引

      本文链接:https://www.haomeiwen.com/subject/mqckiftx.html