MySQL从零开始笔记之概述

一 MySQL是什么?

在官方文档中,MySQL被描述为快速,多线程,多用户,健壮的SQL数据库服务器软件。MySQL倾向服务于严苛型任务,高负载的产品,同时支持大规模的部署。MySQL是Oracle公司开发,支持和分发的最流行的开源SQL数据库关系系统。

1.1 MySQL是一个数据库管理系统

管理MySQL存储的数据,需要一个管理系统,例如MySQL Server。从一个软件的整体性考虑的话,数据库除了自己核心的数据存储和查询的功能,一定会有对用户,数据存储的管理,安全性校验等等管理相关的功能

1.2 MySQL是一个关系型的数据库

一个关系型数据库将数据分隔为多个表,而不是将他们放到一个超级大的存储空间中。数据的物理结构是使用物理文件来存储。逻辑结构包括数据库(databases),表(tables),视图(views),行(rows)和列(columns)。我们可以使用不同的关系来组织数据,一对一(one-to-one),一对多(one-to-many),唯一性(unique), 必须性(required)或者选择性(optional)等。

1.3 MySQL软件是开源的

开源意味着,任何人都可以使用和修改MySQL。

1.4 MySQL是一个快速,可信赖,可扩展,易用的数据库服务

MySQL可以运行在桌面环境,移动环境,网络服务器等多个环境中。你也可以调整内存,CPU和IO性能等,并且MySQL也可以扩展成集群模式。

1.5 MySQL可以工作在C/S或者嵌入式系统中

MySQL数据库软件系统是一个包含多线程的SQL服务,并且支持不同的,多点的客户端程序。如果期望的话也可以作为一个嵌入式的多线程库或者软件使用。

1.6 有大量的MySQL相关软件可以使用

MySQL从建立到现在有很多年了,因为开源的特性,大量的开发者都可以对MySQL进行修改。在长期的使用过程中,积累的各种问题都可以快速找到答案,配套的软件生态也非常好。

二 MySQL主要特性

  1. 使用c和cpp编写
  2. 使用了各种各样的编译器编译测试过
  3. 支持大部分主流平台
  4. 支持平台移植,只要使用CMake编译MySQL5.5以上版本即可,对于过往的版本可以使用GNU Automake。
  5. 使用Linux内核多线程来实现多线程特性
  6. 使用分层的设计思想来解耦各个模块
  7. 使用性能非常好的B树硬盘表来实现索引的压缩
  8. 非常容易添加和切换成其他存储引擎,源于接口的设计模式。
  9. 使用非常快速的基于线程的内存分配系统。
  10. 通过nested-loop执行快速的join(ps:这个必须是join表简历了索引才行,并且要记得用小表做驱动表,算法大致是On级别,驱动表for循环加上查询用hash)
  11. 使用基于内存的hash表作为临时表
  12. SQL函数基于一种非常高效的实现方式,除非没有内存可以分配。
  13. 提供了C/S的模式,也提供了可以直接嵌入到应用中的嵌入式模式。

2.1 声明和函数

  1. 在SQL语法中支持多种函数
  2. 支持show声明来查看数据库,存储引擎,表和索引。支持INFORMATION_SCHEMA表。
  3. 支持EXPLAIN声明帮助优化查询语句

2.2 扩展性和限制

  1. 支持数据库包含5千万条数据,包含20万张表, 大约5000000000行(没看错,手册里面就是这么写的。但是平时我们单表超过千万的数据就查不动了)
  2. 每张表支持简历64个索引。每个索引可以包含1到16列。最大的索引长度(InnoDB)是767字节或者3072字节(根据是否设置了innodb_large_prefix参数)。

三总结

虽然使用了很久MySQL,但是还是有一些都不是很清楚,需要好好学习下。