mysql索引种类(索引种类和建立索引)

一、mysql索引种类

1、加速查找:

  查找普通字段和查找有索引字段,哪个方式查找速度快:根据索引来查字段速度更快

2、创建索引:

为userinfo表email字段创建索引:  create index ix_name on userinfo<email>;     #创建字段email索引文件,起别名ix_name

为某个字段创建索引会创建额外文件(某种格式存储),下次查询这个字段,先去文件中查找数据在表中的位置,拿着这位置去表中定位数据。(类似于查字典)

3.索引种类   

hash索引:索引表(无序的排列)
把数据转换成一个hash值(数值),放在索引表里面,再加上这个数据的存储地址
查找的时候会根据数据查找到存储地址。
注意:数据库的值和索引表存的数值顺序是不一样的。因为这个是无序的排列,所以在数据库中查找大于/小于多少的数据可能花的时间更长。
缺点:在某个范围查找数据速度慢         优点:查找单值速度快

btree索引:
    二叉树
#不同的存储引擎支持的索引类型也不一样
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 等索引;

4.建立索引

1.额外的文件保存特殊的数据结构
2.查询快,插入更新删除慢
3.命中索引(使用索引表)

普通索引

普通索引仅有一个功能:加速查询

创建表+普通索引

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)    #ix_name是索引名,name字段建立索引
)

创建索引

create index ix_name on table_name(column_name);

删除索引

drop index ix_name on table_name;

查看索引

show index from table_name;

唯一索引

唯一索引有两个功能:加速查询和唯一约束(可含null)

创建表+唯一索引

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    unique ix_name (name)
)

创建唯一索引

create unique index 索引名 on 表名(列名)

删除唯一索引

drop unique index 索引名 on 表名

主键索引

主键有两个功能:加速查询 和 唯一约束(不可含null)

创建表+创建主键

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)
)

OR

create table in1(
    nid int not null auto_increment,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    primary key(ni1),
    index ix_name (name)
)

创建主键

alter table 表名 add primary key(列名);

删除主键

alter table 表名 drop primary key;
alter table 表名  modify  列名 int, drop primary key;

联合索引

联合索引是将n个列组合成一个索引

其应用场景为:频繁的同时使用n列来进行查询,如:where n1 = ‘alex‘ and n2 = 666

创建表

create table in3(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text
)

创建联合索引

create index ix_name_email on in3(name,email);     #就是在()中写多个列名

最左前缀匹配,查询:

  • name and email  -- 使用索引
  • name                 -- 使用索引
  • email                 -- 不使用索引  (因为email字段在右边)

注意:对于同时搜索n个条件时,组合索引的性能好于索引合并。

5.不真实存在的索引

名词:

  覆盖索引:在索引文件中直接获取数据

  索引合并:把多个单列索引合并起来用

原文地址:https://www.cnblogs.com/wangcuican/p/12306399.html

时间: 2024-09-30 04:35:43

mysql索引种类(索引种类和建立索引)的相关文章

mysql 给表里的某个字段建立索引

1.添加PRIMARY KEY(主键索引): ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 'table_name' 表名 column 字段 将table_name表的column字段设置为主键 2.添加UNIQUE(唯一索引) : ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 3.添加INDEX(普通索引) : 写法一:ALTER TABLE `table_name` ADD I

mysql性能优化-慢查询分析,优化索引最佳实践

数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显,我们究竟应该如何对MySQL数据库进行优化? 下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分,查询与索引优化分析等方面来说明这个问题. (一)服务器物理硬件的优化 在挑选硬件服务器时,我们应该从下面几个方面着重对MySQL服务器的硬件配置进行优化,也就是说将项目中的资金着重投入到如下几处: 1.磁盘寻道能力(磁盘I/O),我们现在用的都是SAS15000转的硬盘,

lucene建立索引的过程

建立索引过程 用户提交数据=>solr建立索引=>调用lucene包建立索引 官方建立索引和查询索引的例子如下: http://lucene.apache.org/core/4_10_3/demo/overview-summary.html#About_the_code http://lucene.apache.org/core/4_10_3/core/overview-summary.html#overview_description 其他参考文章如下: http://dataknocker

索引笔记《二》确定需要建立索引的列

目录 确定需要建立索引的列 主键列和唯一键列的索引 外键列的索引 其他适合创建索引的列 索引指南 小结 确定需要建立索引的列 现在我们把注意力转到应为哪些列建立索引上.对于初学者来说,我们建议对于大多数应用程序,在下列情况下创建索引. 为每个表定义主键约束:这导致在主键指定的列上自动创建索引. 在要求唯一且不同于主键列的列上创建唯一键约束:每个唯一键约束导致在约束中指定的列上自动创建一个索引. 手动创建外键列上的索引:这是为了得到更好的性能,以避免某些特定的锁问题(有关完整的详细信息,请参阅第2

MySQL索引有哪些种类?MySQL数据库学习

MySQL索引的种类及原理: 1 普通索引    最基本的索引 没有任何限制 2 唯一索引    索引列的值必须唯一 但允许有空值 3 主键索引    不仅唯一而且不允许与空值 一般在建表的同时创建主键索引 4 单列索引 和 组合索引: 单列索引指只包含一个列的索引,一个表中可以有多个列的索引 组合索引指多个字段组合上创建的索引,遵循做前缀集合 (1)索引并非越多越好 索引越多,插入数据增加写操作,对性能影响越大 (2)数据量不多不需要建索引 (3)列的值变换不多不需要建索引 (4)经常排序或分

Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构

1. 索引的分类1 1.1. 按照存储结构划分btree,hash,bitmap,fulltext1 1.2. 索引的类型  按查找方式分,两种,分块索引 vs编号索引1 1.3. 顺序索引  vs 散列索引2 1.4. 按索引与数据的查找顺序可分为 正排与倒排索引2 1.5. 单列索引与多列索引 复合索引2 1.6. 分区索引和全局索引 2 1.7.  Trie树一般指字典树 又称单词查找树,Trie树2 1.8. 稠密索引 vs 稀疏索引3 1.9. 多级索引 vs 单击索引3 1.10.

Atitit.数据索引&#160;的种类以及原理实现机制&#160;索引常用的存储结构

Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构 1. 索引的分类1 1.1. 索引的类型  按查找方式分,两种,分块索引 vs编号索引1 1.2. 按索引与数据的查找顺序可分为 正排与倒排索引1 1.3. 单列索引与多列索引2 1.4. 分区索引和全局索引 2 2. 索引建立,更新的流程使用触发更新索引的事件2 3. 索引常用的存储结构 B树文件 叫做“索引顺序存取方法”(Indexed Sequential Access Method),缩写为ISAM.2 4.  Trie

MySQL建立索引的注意事项

对于大数据量的表格,尤其是百万行以上的数据表,一定要对其建立索引,否则查询速度极慢.(参考后面的测试结果)建立索引时需注意: MySQL的索引有两种:单列索引(即在某一列上建索引).多列组合索引(即在多个列上建立同一个索引),不像SQL Server分聚集索引,非聚集索引. 如何建立单列索引: 格式:CREATE INDEX 索引名 on 表名(列名) 例如:CREATE INDEX idx_geoinfo_tiny_cabid ON geoinfo_tiny (cabid)#创建一个名为idx

MySQL建立索引的基础规则

1.mysql索引(基础与规则) 索引规则: 一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. 四. MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比. 五. MySQL使用时,一条SQL语句只能使用一个表的一个索引.所有的字段类型都可以索引,多列索引的属性最多15