一. 表的存储引擎

1. 概述

  插件式存储引擎是mysql数据库最重要的特性之一,
用户可以根据应用的需要选择如何存储和索引数据,是否使用事务等。在mysql
5.0里支持的引擎包括:

MyISAM,InnoDB,BDB,Memory,Merge,Example,NDB Cluster, Archive,CSV,
BlackHole,
Federated等。其中InnoDB和BDB提供事务安全表,其它存储都是非事务安全表。

2.
默认情况下,创建表不指定表的存储引擎,新表是默认的存储引擎,如需要修改如下

SHOW VARIABLES LIKE 'table_type';
-- 注意在5.7里查看使用default_storage_engine
SHOW VARIABLES LIKE 'default_storage_engine%'

图片 1

3. 下面查询当前数据库版本支持的引擎

SHOW ENGINES;

图片 2

4. 使用engine 关键词来显示指定表的存储引擎

CREATE TABLE ai
(
  i BIGINT(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY(i)
)ENGINE=MYISAM DEFAULT CHARSET=gbk;

CREATE TABLE country
(
  country_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  country VARCHAR(50) NOT NULL,
  last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY(country_id)
)ENGINE=INNODB DEFAULT CHARSET=gbk;

5. 表修改引擎

ALTER TABLE ai ENGINE=INNODB;
SHOW CREATE TABLE ai ;

图片 3

6. 各种存储引擎的特性

图片 4

 

查询这块是重中之重, 关系到系统反应时间. 项目做到后期,
都是要做性能测试和性能优化的, 优化的时候, 数据库这块是一个大头.

查询数据库中的表及列,依数据库自带的函数,一条语句就可以搞定:

sql格式: select 列名/* from 表名 where 条件 group by 列 having 条件
order by 列 asc/desc;

SELECT * FROM INFORMATION_SCHEMA.COLUMNS

这里牵涉到一个查询执行顺序的问题. 

 

单表查询执行顺序: 

select sex, count(Sex) as count from tch_teacher where id > 15 group by Sex having count > 5 order by Sex asc limit 1;

1-> from 表 :
首先拿到表tch_teacher

2-> where 条件 : 根据where后面的条件筛选一遍数据集合A

3-> group by 分组 : 对筛选出的数据A, 根据group by后面的列进行分组,
得到数据集B

4-> having 筛选 : 对数据集B进行进一步筛选, 得到数据集C

5-> select 数据 : 这里有四步

                         第一步 : 根据select后面的列名,
去数据集C中取数据. 得到数据集D

                         第二步 :
对数据集D中的数据进行去重操作(这一步是建立在 sql中有distinct 情况下),
得到数据集E

                         第三步 : 对数据集E进行排序操作, 得到数据集F

                         第四步 : 对数据集F进行截取数据操作,
得到最终的数据集(执行 limit 10 操作)

 在多表的时候, 优化器在优化的时候, 会有些区别, 有些地方,
会用到where条件, 然后才连表

 

一、连表查询

  1. 交叉连接 — 笛卡尔乘积  cross join

    select * from tch_teacher cross join tch_contact

这种连接方式, 没见人用过.
 如果tch_teacher,tch_contact表各有10条数据, 那么连接的结果, 就是 10 x
10 = 100 条数据. 

图片 5

发表评论

电子邮件地址不会被公开。 必填项已用*标注