【MySQL】29 索引

MySQL是一个关系型的数据库

使用标准的SQL数据格语言格式

支持大型数据库,处理千万级别的记录数据

允许多系统运行,支持多种编程语言连接

最重要的一点是MySQL允许定制,采用GPL协议,允许修改MySQL源码来实现定制SQL系统

 

在Linux安装MySQL:【省略】

MyISAM & InnoDB

MyISAM

不支持主外键,不支持事务,仅有表锁,不适合高并发操作

缓存只缓存索引,不支持缓存真实数据

表空间小,注重的是数据库管理系统的性能问题

InnoDB

支持主外键,支持事务管理,使用行锁控制,适合高并发操作

缓存索引和真实数据,对内存要求较高,而且内存大小对性能的影响是决定性的

表空间占用相比MyISAM较大,关注的重点是对事物的管理控制

SQL查询性能下降的原因:

- SQL语句写的不够优雅

- 索引失效

- 关联查询关联表过多【需求所迫】

- 服务器调优和各个参数设置(缓冲,线程数)

首先是对数据的排序整理,在检索的时候效率更快。

索引 Index

索引分为了两种,第一种是单值索引,第二种是复合索引

单值索引的创建,即给某一个字段创建索引

CREATE [UNIQUE | FULLTEXT | SPATAL] INDEX 索引名称 ON 表名(字段名[索引长度]);

可选参数的说明:

1UNIQUE       唯一索引

2、FULLTEXT    全文索引

3、SPATAL        空间索引

索引名称的规范:

idx_表名_字段名

复合索引,就是对一个字段以上的多字段同时创建索引

create index 索引名称 on 表名(字段1,字段2,字段3)

复合索引的名称规范:

idx_表名_字段名1字段名2字段名3
【按照小驼峰方式命名】

查看索引:

SHOW INDEX FROM 表名称

显示的参数信息:

1table                 表格名称

2、non_unique       索引是否唯一,1不是,0是

3、key_name         索引名称

4、seq_in_index     该列在索引中的顺序位置,单索引值为1,复合索引按定义的顺序返回顺序值

5、column_name    定义索引的列名

6、sub_part            索引长度

7null                    该列是否能为空

8、index_type          索引类型

索引删除:

DROP INDEX 表的名称.索引名称

常见的Join查询:

SQL语法顺序

SELECT DISTINCT
    要查询的字段,表达式,就是查询列表
FROM
    查询列表的来源表,
    多表查询的关联条件
WHERE
    首要的筛选条件
GROUP BY
    对上面查询的结果再进字段的分组
HAVING
    对分组的字段进行筛选条件
ORDER BY
    然后进行字段排序
LIMIT
    对以上查询的结果,分页查询

SQL执行顺序:

关于数据库管理系统,按照机器运行SQL的顺序:

- 1、检索数据库查看FROM子句是选择了哪些数据表

- 2、多表关联,查看关联条件的构成

- 3、检查是否带有WHERE子句的筛选条件

- 4、检查是否需要GROUP BY分组查询数据

- 5、检查是否需要HAVING对分组后的数据二次筛选条件

- 6、回到最开始的SELECT子句的查询列表,把结果返回到这些要求的字段中

- 7、DISTINCT 子句 对查询结果去除重复

- 8、ORDER BY 子句 进行升序降序处理

- 9、LIMIT 子句 进行分页处理

7种连接方式:

- 左外右 + 外连接

- 全外连接【笛卡尔积】

- 内连接

 

posted @ 2020-09-26 15:00  emdzz  阅读(135)  评论(0编辑  收藏  举报