MySQL学习之——索引篇

原创 2015年07月09日 17:51:16

主键:主键是能够唯一标识表中某一行的属性或者属性组。一个表只能有一个主键,但可以有多个候选索引。主键可以保证记录的唯

一和主键域非空,数据库管理系统对于主键自动生成唯一的索引,索引主键页是一个特殊的索引。

primary key 和unique key 的区别:

primary key 就是主键索引

unique key 是唯一性索引,

1.主键不能为空,但是unique key 可以为空,两者在表中都是唯一不能重复的值。

2.主键一定是唯一的索引,唯一的索引不一定是主键

3.主键可以被其他的表做外键引用,而索引不能作为外键引用

外键:foreign key 。MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种

(以下3点是查资料查到的)

① 两个表必须是InnoDB表,MyISAM表暂时不支持外键

② 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;

③ 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如inttinyint可以,而intchar则不可以;
普通索引:索引的创建有3中方式
create table table_name([...] , index [索引名] (列的列名))

   create index [索引名] on table (列的列名)
alter table table_name add index [索引名] (列的列名)
唯一性索引的建立就在索引名前加 unique 这个关键字 (唯一性索引,处理字段数据的唯一性,其余的和普通索引一 样)。
全文索引

MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在varchar或者text类型的列上创建。它可以通过create table命令创建,也可以通过alert table或create index命令创建。对于大规模的数据集,通过alter table(或者create index)命令创建全文索引要比把记录插入带有全文索引的空表更快。

单列索引和多列索引
索引可以是单列的也可以是多列的。他们有如下区别
在我的‘xhh’表中存有4个人的信息 ,有2个人姓名相同,3个人年龄相同,2个人的班级相同。

我想查name='zch' and age=23 and class1=1203先考虑建立单个索引,但是单个索引的话,怎么都不能建一个索引一次性找出一条数据。

这样就可以建一个多列索引create index name_age_class on xhh(name,age,class1);

由于索引文件以B-树格式保存,MySQL能够立即转到合适的name,然后再转到合适的age,最后转到合适的class1。在没有扫描数据文件任何一个记录的情况下,MySQL就正确地找出了搜索的目标记录!那么,如果在name、age、class1这三个列上分别创建单列索引和创建一个name、age、class的多列索引的效果完全不同。当执行查询的时候,MySQL只能使用一个索引。如果你有三个单列的索引,MySQL会试图选择一个限制最严格的索引。但是,即使是限制最严格的单列索引,它的限制能力也肯定远远低于name、age、class1这三个列上的多列索引。
最左前缀
  多列索引还有另外一个优点,它通过称为最左前缀(LeftmostPrefixing)的概念体现出来。
比如我们建的3列索引,就相当于建立了3个索引,对name name,age name,age,class1 3个查询都能索引到
如何选择索引列

1.在where子句中出现的列建索引
  2.join连接的连接字段建立索引








学习编程道路上的书籍之Python篇

学习编程专栏连载编程学习编程道路上的入门书籍之Python篇,文章中的所有推荐的书籍均来自知乎社区大牛力荐书籍、豆瓣评分较高书籍、各语言社区比较热门书籍以及京东、亚马逊、当当热销书籍的重合书籍。...
  • Ly4wU5giY
  • Ly4wU5giY
  • 2016年10月29日 19:16
  • 54

一步一步学ROP之linux_x86篇

0x00    本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。    阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈...
  • jltxgcy
  • jltxgcy
  • 2016年02月19日 11:16
  • 2466

【备忘】javaEE系统架构师学习路线之基础篇

javaEE系统架构师学习路线之基础篇
  • qq_38472425
  • qq_38472425
  • 2018年01月11日 16:02
  • 77

深度学习word2vec笔记之基础篇

深度学习word2vec笔记之基础篇
  • mytestmy
  • mytestmy
  • 2014年05月25日 16:00
  • 67800

1、(一)外汇学习基础篇之通用定义

一、基础定义 1、外汇(Foreign Exchange / FX) 指以外币表示的可以用作国际清偿的支付手段和资产。本指引所指外汇为人民币以外的币种。 【例】 (美元)USD ...
  • Pinoc_chao
  • Pinoc_chao
  • 2017年06月21日 16:35
  • 454

MYSQL学习心得(10) -- 索引

索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型。 根据存储引擎定义每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总...
  • helongzhong
  • helongzhong
  • 2016年12月12日 11:22
  • 346

mysql学习之索引原理

数据表中默认字段 数据表中,不要将0值设置为可能会正常出现的业务字段。 理由是:当相应的字段在数据库中查不到时,如果在java程序中的处理不是返回null,那么将默认为0值, 此时 ...
  • hust_dxxxd
  • hust_dxxxd
  • 2016年08月21日 20:29
  • 908

mysql之索引篇

索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 my...
  • weixin_36899430
  • weixin_36899430
  • 2016年12月02日 10:18
  • 77

《sed & awk》读书笔记之 sed 篇

Sed&awk笔记之sed篇:简单介绍 最近在阅读《sed & awk(第二版)》,这本书是sed和awk相关书籍中比较经典的一本。我在读书的时候有一个习惯,就是会作一些笔记,如果有条件我会放到博客中...
  • chenyulancn
  • chenyulancn
  • 2014年01月02日 15:24
  • 573

异化的追思——读《变形记》《火之鸟10复活篇》《沙耶之歌》》

  原文图文并茂,请到http://www.jsharer.com/file/738383.htm下载 异化的追思——读《变形记》《火之鸟10复活篇》《沙耶之歌》》Version 1.000三部作品的...
  • luozhuang
  • luozhuang
  • 2008年07月14日 13:21
  • 5540
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL学习之——索引篇
举报原因:
原因补充:

(最多只允许输入30个字)