MySQL总结

1、MySQL架构

​  连接层、服务层、引擎层、存储层

2、存储引擎

​  查看存储引擎

-- 查看支持的存储引擎
SHOW ENGINES
-- 查看默认存储引擎
SHOW VARIABLES LIKE 'storage_engine'
--查看具体某一个表所使用的存储引擎,这个默认存储引擎被修改了!
show create table tablename
--准确查看某个数据库中的某一表所使用的存储引擎
show table status like 'tablename'show table status from database where name="tablename"

​  设置存储引擎

-- 建表时指定存储引擎。默认的是INNODB,不需要设置
CREATE TABLE t1 (i INT) ENGINE = INNODB;
CREATE TABLE t2 (i INT) ENGINE = CSV;
CREATE TABLE t3 (i INT) ENGINE = MEMORY;
-- 修改存储引擎
ALTER TABLE t ENGINE = InnoDB;
-- 修改默认存储引擎,也可以在配置文件my.cnf中
修改默认引擎SET default_storage_engine=NDBCLUSTER;

3、数据类型

img

img

img

4、索引

​  1、创建索引

CREATE [UNIQUE] INDEX indexName ON mytable(username(length));
-- 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

ALTER table tableName ADD [UNIQUE] INDEX indexName(columnName);
-- 修改表结构 - 添加索引

​  2、删除索引

DROP INDEX [indexName] ON mytable;

​  3、查看索引

SHOW INDEX FROM table_name\G;
-- 可以通过添加 \G 来格式化输出信息。

​  4、修改索引

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);
-- 添加一个主键(索引值必须是唯一的,且不能为NULL)。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list);
-- 添加唯一值索引(可以为NULL,NULL可以出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list);
-- 添加普通索引,索引值可出现多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list);
-- 指定索引为 FULLTEXT,用于全文索引。

​  索引是在存储引擎层面实现的,其本质也是一张表,所以占内存。提高了表查询速度的同时,降低了表更新的速度。

5、查询

​  1、count(*)、count(1)、count(列名) 的区别
​   a. count(*) 包括了所有的列,在统计时不忽略列值为NULL
​   b. count(1) 包括了所有的列,在统计时不忽略列值为NULL
​   c. count(列名) 只包括指定列,统计结果时会忽略列值为NULL的计数
​  区别:
​   a. 列名为主键:count(列名) 会比 count(1) 快
​   b. 列名非主键:count(1) 会比 count(列名) 快
​   c. 多列无主键:count(1) 的执行效率优于 count(*)
​   d. 如果有主键:select count(主键)的执行效率是最优的
​   e. 如果单字段:则 select count(*) 最优。

​  2、in 和 exists 的区别

​   a. exists 对外表用 loop 逐条查询

​   b. in 相当于多个 or 条件叠加

SELECT * FROM A WHERE A.id IN (SELECT id FROM B);
SELECT * FROM A WHERE EXISTS (SELECT * from B WHERE B.id = A.id);

​  如果查询的两个表大小相当,那么用 in 和 exists 差别不大。

6、SQL执行顺序

​  手写

SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <order_by_condition> LIMIT <limit_number>

​  机读

FROM <left_table> ON <join_condition><join_type> JOIN <right_table> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> SELECTDISTINCT <select_list> ORDER BY <order_by_condition> LIMIT <limit_number>

7、JOIN图

img

posted @ 2022-07-04 11:40  anyiya  阅读(24)  评论(0编辑  收藏  举报