概述
数据库高级特性
- 1.事务特性
- 2.SQL语句执行加载顺序
- 3.七种 JOIN 理论
- 4.MySQL 的索引
- 索引的基本概念
- MySQL 使用的索引
- MySQL 索引分类
- 索引的创建时机
1.事务特性
shwo engines;
用于查看你的 mysql 提供了什么存储引擎:show variables like '%storage_engine%'
查看当前 mysql 默认的存储引擎:
- MySQL 常用的两种存储引擎的区别:
对比项 | MyISAM | InnoDB |
---|---|---|
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发操作 | 行锁,操作时只锁住某一行,不对其他行有影响,适合高并发的操作 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能起到决定性的影响 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
默认安装 | Y | Y |
2.SQL语句执行加载顺序
FROM <left_table>
ON <join_condition>
<join_type> JOIN <trght_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>
3.七种 JOIN 理论
- INNER JOIN 内连接(两表共有部分):
select * from Table A INNER JOIN Table B ON A.Key=B.key;
- LEFT JOIN 左连接(两表共有部分以及左表全部):
select * from Table A LEFT JOIN Table B ON A.Key=B.key;
- LEFT JOIN 左连接独有部分(左表独有数据):
select * from Table A LEFT JOIN Table B ON A.Key=B.key WHERE B.Key IS NULL;
- RIGHT JOIN 右连接(两表共有部分以及右表全部):
select * from Table A RIGHT JOIN Table B ON A.Key=B.Key
- RIGHT JOIN 右连接独有部分(右表独有数据):
select * from Table A RIGHT JOIN Table B ON A.Key=B.Key WHERE A.Key IS NULL;
- FULL OUTER JOIN 全连接(两表全部数据):
select * from Table A left join Table B ON A.Key=B.Key union select * from Table A right join Table B ON A.Key=B.Key
- FULL OUTER JOIN 全连接独有部分(两表独有数据):
select * from Table A left join Table B ON A.Key=B.Key where B.Key is null union select * from Table A right join Table B ON A.Key=B.Key where A.Key is null
4.MySQL 的索引
索引的基本概念
- 索引简单理解为:排好序的快速查找数据结构
- 索引优势:
- 提高数据检索的效率,降低数据库的 IO 成本;
- 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的下消耗
- 索引劣势:
- 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如果对表进行 insert、update、delete。因为更新表的时候,MySQL 不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。
- 实际上索引也是一张表,该表保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的。
MySQL 使用的索引
MySQL 使用的是 Btree 索引
MySQL 索引分类
- 单值索引
即一个索引只包含单个列,一个表可以有多个单列索引
CREATE INDEX index_name ON tableName(column_name);
- 唯一索引
索引列的值必须唯一,但允许有空值
CREATE UNIQUE INDEX index_name ON tableName(column_name);
- 主键索引
设定为主键后数据库会自动建立索引,innoDB 为聚簇索引
// 单独建立主键索引
ALTER TABLE customer add PRIMARY KEY customer(curtomer_no);
// 删除主键索引
ALTER TABLE customer drop PRIMARY KEY;
// 修改主键索引 (必须先删除原索引,再新建索引)
- 复合索引
即一个索引包含多个列
// 单独创建索引
CREATE INDEX idx_no_name ON customer(customer_no,customer_name);
索引的创建时机
-
适合创建索引的情况
1. 主键自动建立唯一索引;
2. 频繁作为查询条件的字段应该创建索引;
3. 查询中与其他表关联的字段,外键关系建立索引;
4. 单键/组合索引的选择问题,组合索引性价比更高;
5. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序素的;
6. 查询中统计或者分组字段; -
不适合创建索引的情况
- 表记录太少;
- 经常增删改的表或者字段;
- where 条件中用不到的字段不创建索引;
- 过滤性不好的不适合创建索引;
最后
以上就是标致裙子为你收集整理的数据库高级特性(入门1)的全部内容,希望文章能够帮你解决数据库高级特性(入门1)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复