博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库高级特性(入门1)
阅读量:3947 次
发布时间:2019-05-24

本文共 2272 字,大约阅读时间需要 7 分钟。

数据库高级特性

1.事务特性

  1. shwo engines; 用于查看你的 mysql 提供了什么存储引擎:
  2. show variables like '%storage_engine%' 查看当前 mysql 默认的存储引擎:
  • MySQL 常用的两种存储引擎的区别:
对比项 MyISAM InnoDB
主外键 不支持 支持
事务 不支持 支持
行表锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发操作 行锁,操作时只锁住某一行,不对其他行有影响,适合高并发的操作
缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能起到决定性的影响
表空间
关注点 性能 事务
默认安装 Y Y

2.SQL语句执行加载顺序

FROM 
ON
JOIN
WHERE
GROUP BY
HAVING
SELECTDISTINCT
ORDER BY
LIMIT

3.七种 JOIN 理论

  1. INNER JOIN 内连接(两表共有部分):
    select * from Table A INNER JOIN Table B ON A.Key=B.key;
  2. LEFT JOIN 左连接(两表共有部分以及左表全部):
    select * from Table A LEFT JOIN Table B ON A.Key=B.key;
  3. LEFT JOIN 左连接独有部分(左表独有数据):
    select * from Table A LEFT JOIN Table B ON A.Key=B.key WHERE B.Key IS NULL;
  4. RIGHT JOIN 右连接(两表共有部分以及右表全部):
    select * from Table A RIGHT JOIN Table B ON A.Key=B.Key
  5. RIGHT JOIN 右连接独有部分(右表独有数据):
    select * from Table A RIGHT JOIN Table B ON A.Key=B.Key WHERE A.Key IS NULL;
  6. 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
  7. 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 的索引

索引的基本概念

  • 索引简单理解为:排好序的快速查找数据结构
  • 索引优势:
    1. 提高数据检索的效率,降低数据库的 IO 成本;
    2. 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的下消耗
  • 索引劣势:
    1. 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如果对表进行 insert、update、delete。因为更新表的时候,MySQL 不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。
    2. 实际上索引也是一张表,该表保存了主键与索引字段,并指向实体类的记录,所以索引列也是要占用空间的。

MySQL 使用的索引

MySQL 使用的是 Btree 索引

MySQL 索引分类

  1. 单值索引即一个索引只包含单个列,一个表可以有多个单列索引
CREATE INDEX index_name ON tableName(column_name);
  1. 唯一索引索引列的值必须唯一,但允许有空值
CREATE UNIQUE INDEX index_name ON tableName(column_name);
  1. 主键索引设定为主键后数据库会自动建立索引,innoDB 为聚簇索引
// 单独建立主键索引ALTER TABLE customer add PRIMARY KEY customer(curtomer_no);// 删除主键索引ALTER TABLE customer drop PRIMARY KEY;// 修改主键索引 (必须先删除原索引,再新建索引)
  1. 复合索引即一个索引包含多个列
// 单独创建索引CREATE INDEX idx_no_name ON customer(customer_no,customer_name);

索引的创建时机

  • 适合创建索引的情况

    1. 主键自动建立唯一索引;
    2. 频繁作为查询条件的字段应该创建索引;
    3. 查询中与其他表关联的字段,外键关系建立索引;
    4. 单键/组合索引的选择问题,组合索引性价比更高;
    5. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序素的;
    6. 查询中统计或者分组字段;

  • 不适合创建索引的情况

  1. 表记录太少;
  2. 经常增删改的表或者字段;
  3. where 条件中用不到的字段不创建索引;
  4. 过滤性不好的不适合创建索引;

转载地址:http://lsqwi.baihongyu.com/

你可能感兴趣的文章
android 图库中对非mp4格式的视频去掉"修剪"功能选项
查看>>
how to disable watchdog
查看>>
android SDIO error导致wifi无法打开或者连接热点异常的问题
查看>>
android USB如何修改Serial Number or SN?
查看>>
android 用svn管理的版本编译出来有问题
查看>>
android 如何用jar包代替java代码编译
查看>>
android 数据连接关闭的情况下如何让彩信发不出去
查看>>
android 编辑彩信,加入几页铃声,预览暂停界面,铃声名字不见了
查看>>
android 在新建短信时,加入名称为","(英文逗号)的联系人时,应用崩溃的修改
查看>>
android 关于LCD背光调节渐变过程引起背光闪烁问题
查看>>
android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
查看>>
android 在手机中预置联系人/Service Number
查看>>
android 系统语言为英语时,Contacts联系人名字含有特殊前缀后缀(Dr. Mr. Lt等)时的相关问题处理
查看>>
android 短信下,添加联系人,进入联系人多选界面出现联系人电话号码晃动的问题
查看>>
android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题
查看>>
正确学习javascript。困惑的指南
查看>>
SERO幻影社区的背景怎么样?几大主流隐私币种技术分析!
查看>>
SERO目前具备的十大技术特点
查看>>
Neo4j CQL语句学习Day3
查看>>
Neo4j CQL学习Day4
查看>>