MySQL——表的连接、索引

一、表的连接
首先表的连接分为两种,一种是内连接一种是外连接。
1.内连接:内链接其实就是使用where语句形成笛卡儿积对表的内容进行筛选,内链接在查询中是使用最多的。
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
select 字段 from 表1 where 表1属性=表2属性;
2.外连接
(1)左外连接:如果我们使用联合查询,就会让左侧的表完全显示。
select 字段名 from 表1 left join 表名2 on 连接条件。
(2)右外连接:如果我们联合查询,右边的表将完全显示。
select 字段 from 表名1 right 表名2 on 连接条件;
二、索引特性(重点)
1.索引的概念
索引主要是在提高数据库的性能,它不用加内存,不用改程序,不用调sql,只需要我们执行正确的create index,查询速度就可以提高上百倍。但是任何一个东西都是有利也有弊,索引也是一样的,虽然它提高我们查询数据的性能,但是它的更新、删除的速度减慢了,这些操作增加了大量的IO。所以索引的最大好处在于它可以提高检索的效率。使用索引之所以会降低增加、删除、更新这些速度,是因为检索采用的是数据结构中的二叉树,它的改变会引起这个搜索二叉树的序列变化,所以需要重新改变它的搜索序,这样就会降低速度高;而查找之所以快是因为查找的时候通过二叉树采用的二分查找,所以它的效率高。索引的原理说明:第一它占用磁盘空间;第二当增加一条记录的时候,除了添加到表中还需要维护二叉树;第三当增加一个索引不能解决问题的时候,需要分别给字段建立索引;第四,索引是以空间换时间。索引主要用在海量数据的检索;
2.常见索引
*主键索引(primary key)
*唯一索引(unique)
*普通索引(index)
*全文索引(fulltext)–解决中子文索引问题(只有MySIAM存储引擎支持)
3.创建索引
(1)创建主索引
第一种方式:创建表的时候,直接在字段后面指定primary key;
create table user1(id int primary key,name varchar(30));
第二种方式:在创建表的最后,指定某列或某几列为主键索引;
create table user2 (id int,name varchar(30),primary key(id));
第三种方式:创建表以后再添加主键;
create table user3(id int,name varchar(30));
alter table user3 add primary key(id);
*主键索引的特点:
主键约束的特点+主键索引可以提升检索效率
(2)唯一索引的创建
第一种方式:在定义表时在某列后面直接用unique修饰;
create table user4(id int primary key,name varchar(30) unique);
第二种方式:创建表后在表的后面指定某列或某几列为unique;
create table user5(id int name varchar(30),unique(name));
第三种方式:创建表以后再添加唯一键;
create table user3(id int primary key,name varchar(30));
alter table user3 add unique(id);
*唯一键索引特点:
多个一个表中,可以有多个唯一索引,查询效率高;如果在某一列建立唯一索引必须保证这列不能有重复数据;如果一个唯一索引上指定not null,等价于主键索引。
(3)普通索引的创建
第一种方式:在表的最后定义,指定为某列的索引
create table user8(id int primary key,name varchar(30),email varchar(30),index(name));
第二种方式:创建表以后指定某列为普通索引
create table user9(id int primary key,name varchar(20),email varchar(30));
alter table user9 add index(name);
第三种方式:创建一个索引名为什么的索引;
create table user10(id int primary key,name vrchar(20),email varchar(30));
create index idx_name on user10(name);
*普通索引的特点:一个表可以有多个普通索引,如果某列需要创建索引,但是该列有重复的值我们就使用普通索引。
(4)全文索引的创建
当文章需要对大量的文字进行检索的时候,会使用全文索引。存储引擎MyISAM会提供全文索引的功能,并且默认的全文索引支持英文,不支持中文。

create table articles(
id int not null primary key,
title varchar(200),
body text,
fulltext(title,body)
)engine=MyISAM;

查看存储引擎的类型:关键字为explain
explain select * from articles where body like ‘%database%’\G
注意:\G表示垂直展示
MySQL——表的连接、索引_第1张图片
最后查询出来的结果中type这一行表示索引的类型,对于全文索引就是full。
重点:数据库的优化
        对于数据库的优化,需要用到索引,但是具体的使用方法是:先用explain关键字看一下该表中是否有用到索引,如果没有那么你就可以根据不同的需求添加不同的索引,比如需要多字段的检索,那么肯定就会使用到全文索引,如果是不重复用到唯一键索引等等,添加索引以后执行sql语句检验看是否有提高效率,如果没有,那么再使用explain关键字查询看索引是否有生效。
4.索引的查询
第一种方法:show keys from 表名
查询的结果表示的意思:
MySQL——表的连接、索引_第2张图片
第二种查询方法:show index from 表名;
第三种查询方法(信息简略):desc 表名;
5.索引的删除
第一种方法——删除主键索引:alter table 表名 drop primary key;
第二种方法——删除其他索引:alter table 表名 drop index 索引名;
其中索引名就是show keys from 表名\G 中的key_name字段;
第三种方法:drop index 索引名 on 表名
eg:drop index name on user8;
6.索引的创建原则
(1)同一个表里的索引名是不能重复的,但是在同一个数据库里可以重复;
(2)在查询字段时查询条件比较繁琐的时候应该创建索引;
(3)唯一性太差的字段就算是频繁查询也不适合单独创建索引;
(4)更新比较频繁的字段也不适合创建索引,因为更新二叉树需要花太多的时间;
(5)不会出现在wher这个e子句中的字段不应该创建索引(也就意味着这个字段不需要进行查询)。

你可能感兴趣的:(MySQL数据库)