####共享锁(shared lock)和排它锁(exclusive lock)
也叫读锁(red lock)和写锁(write lock)
####多版本并发控制,(Multi-Version Concurrency Control)
InnoDB的MVCC,通过在每行后面保存2个隐藏列,创建时间和过期时间,类似拉链表,实际存的是系统版本号
####InnoDB存储引擎
+ 事务。如果不需要事务,主要是select和insert,那么可以用MyISAM
+ 备份。(在线热备份)
+ 崩溃恢复。MyISAM崩溃后损坏的概率比InnoDB高很多

修改表的存储引擎

先创建新表,用新的引擎,再把数据导入

服务器分类

  • SMP(Symmetric Multi-Processor),对称单节点多核
  • MPP(Massive Parallel Processing),多节点多核

RAID

Redundant Array of Independent Disks(独立磁盘冗余阵列),简称磁盘阵列


####连接mysql
mysql -hlocalhost -uroot -p
####查看表信息
show table status like 'user'


####服务器运行状态
show global status
####查看有哪些线程在运行
show full processlist
show processlist\G,(垂直方式输出)
####基准测试套件
Mysql基准测试套件(Benchmark Suite)是基于Perl开发的,在安装目录下的sql-bench子目录中
####慢查询日志是否开启
SHOW VARIABLES LIKE 'slow_query_log';
####慢查询日志存放位置
SHOW VARIABLES LIKE 'slow_query_log_file';


####尽量避免NULL
可为NULL的列使得索引,索引统计和值比较都更复杂。要建索引的列避免NULL
####timestamp和datetime
+ timestamp包含不同时区的时间,空间效率更高
+ datetime保存更大范围,1001到9999年

范式和反范式

  • 范式的表更小,很少有多余的数据,更少需要distinct和group by
  • 缺点是经常需要关联查询
  • 反范式所有数据都在一张表中,可以避免关联查询
  • 缺点是查询最差情况要全表扫描

加快alter table操作的速度

  • 先再1台不提供服务的机器上alter,然后和提供服务的主库切换
  • 建一张新表,导完数据再重命名替换

####B-Tree索引
适用于全键值,键值范围,键前缀。如果查询中有某个列的范围查询,则其右边的列都无法使用索引
####哈希索引(Memory引擎)
对每行数据的索引列计算一个hash code,将所有的哈希码存储在索引中,同时在哈希表中保存指向每行数据的指针。
#####创建自定义的哈希索引
key很长的时候比如url,where查询条件包括url常量值和经过哈希函数处理后的key,可以使用触发器在insert和update时维护哈希值。不包含常量值会引起哈希冲突
####空间数据索引(R-Tree)
MyISAM支持空间索引,地理数据存储
####聚簇索引
聚集索引将索引和数据保存在同一个b-tree中
####数据文件的结构
在data目录中,.MYD是数据文件,.MYI是索引文件,.frm是结构文件
####explain
使用explain加查询语句,可以查看是否用上索引,有没有做全表扫描等
```bash
mysql> explain select * from user;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | user | ALL | NULL | NULL | NULL | NULL | 4 | |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
1 row in set (0.01 sec)
```
####optimize
删除大量数据后,容易产生碎片,会使数据文件大小不变(MYD和MYI大小没变),影响插入。optimize可以清除碎片,把分散存储的数据和索引重新挪到一起,操作时会加锁
####使用索引原则
+ 尽可能将要做范围查询的列放到索引后面,以便优化器能用尽可能多的索引列。查询只能使用索引的最左前缀,知道遇到第一个范围条件列
+ 可以的条件下,可以把范围查询替换成in(1,2,3)的等值查询


####分而治之
比如删除数据的时候,一次删除大量数据,可能一次锁住很多数据,阻塞其他查询。可以定时任务每个月删除数据,再每次到达一定行后删除,避免一次性删除大量数据。
####关联查询using
select * from a join b on a.id=b.id,可以简写为
select * from a join b using(id)
####分区表
通过分区函数来过滤一些分区
####存储过程
存储过程速度更快,因为无需网路通信开销,解析开销和优化器开销

mysql概念特性和优化的更多相关文章

  1. MySQL · 特性分析 · 优化器 MRR & BKA【转】

    MySQL · 特性分析 · 优化器 MRR & BKA 上一篇文章咱们对 ICP 进行了一次全面的分析,本篇文章小编继续为大家分析优化器的另外两个选项: MRR & batched_ ...

  2. mysql笔记04 MySQL高级特性

    MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...

  3. MySQL · 引擎特性 · InnoDB 事务子系统介绍

    http://mysql.taobao.org/monthly/2015/12/01/ 前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoD ...

  4. MySQL之查询性能优化(二)

    查询执行的基础 当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.MySQL执行一个查询的过程,根据图1-1,我们可以看到当向MySQL发送一个请求时, ...

  5. [MySQL Reference Manual] 8 优化

    8.优化 8.优化 8.1 优化概述 8.2 优化SQL语句 8.2.1 优化SELECT语句 8.2.1.1 SELECT语句的速度 8.2.1.2 WHERE子句优化 8.2.1.3 Range优 ...

  6. MySQL · 引擎特性 · InnoDB 崩溃恢复过程

    MySQL · 引擎特性 · InnoDB 崩溃恢复过程 在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主 ...

  7. 腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化

    作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作 ...

  8. 第 8 章 MySQL 数据库 Query 的优化

      前言: 在之前“影响 MySQL 应用系统性能的相关因素”一章中我们就已经分析过了Query语句对数据库性能的影响非常大,所以本章将专门针对 MySQL 的 Query 语句的优化进行相应的分析. ...

  9. MySQL 数据库 Query 的优化

    理解MySQL的Query Optimizer MySQL Optimizer是一个专门负责优化SELECT 语句的优化器模块,它主要的功能就是通过计算分析系统中收集的各种统计信息,为客户端请求的Qu ...

随机推荐

  1. chmod及chown命令详解

    1,chmod 指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/ ...

  2. [Swing]树形结构的实现

    一般步骤: 1.建立根节点 private DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点"); 2.建 ...

  3. Selenium/HtmlUnit设置代理获取JS生成的网页

    通常我们使用Java提供的HttpURLConnection或者Apache的HttpClient获取的网页源代码都是直观可见的,其代码的内容和通过浏览器右键网页->点击查看网页源代码的内容一致 ...

  4. 20155117王震宇 2006-2007-2 《Java程序设计》第5周学习总结

    教材学习内容总结 try & catch java中的错误会被打包成对象,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理.如果发生错误,会跳到catch的区块并执行. 异常结构 ...

  5. 【代码优化】调用optional delegates的最佳方法

    [转载请注明出处]http://www.cnblogs.com/lexingyu/p/3932475.html 本文是以下两篇blog的综合脱水,感谢两位作者为解放码农生产力所做的深入思考=.= Sm ...

  6. VScode格式化ESlint

    打开 文件-首选项- 设置 mac可以按快捷键(command和,) 然后在右上角的省略号选择open setting json { // vscode默认启用了根据文件类型自动设置tabsize的选 ...

  7. TCP 传输控制协议(转)

    开头先说几个协议: IP:网际协议 TCP:传输控制协议 Http:超文本传输协议 AMQP:高级消息队列协议 一:TCP是什么? TCP(Transmission Control Protocol ...

  8. 实现UE添加自定义按钮之添加菜单

    1.ueditor.config.js配置文件中配置 2.在ueditor.all.js配置文件中配置点开的的弹框位置 3.在ueditor1_4_3-utf8-jsp\themes\default\ ...

  9. 混合式App开发 Apicloud 官方iPhone X 适配

    iPhone X 适配 由于iPhone X的特殊造型,为了方便开发者对iPhone X进行适配,苹果在iOS 11中引入了Safe Area的概念,引擎也在api对象下添加了safeArea属性和s ...

  10. 关于DataTable.Select不到数据的一种解决方案

    网上有很多说的,试过,都没用.自己研究了一下,解决方案如下: 建立dataview,用dv.rowfilter,就可以取到了,然后TOTABLE即可. 代码如下:(只看中间那几句即可) private ...