MYSQL的一些基础底层

1. 数据库应用的分类

一类是OLTP:在线事务处理,如博客、电子商务、网络游戏;
另一类OLAP:在线分析处理,如数据仓库、数据集市; 对于OLAP的应用,分区的确可以很好的提高查询的性能;

2. MYSQL的慢查询

通过 long_query_time 设置阈值,默认是10,代表10秒; 默认情况下,mysql并不启动慢查询日志,需要手工设置 log_slow_queries设置为ON开启慢查询日志。

3. InnoDB存储引擎表类型

在InnoDB存储引擎表中,每张表都有一个主键,如果在创建表时没有显示地定义主键,则InnoDB存储引擎会按如下的方式选择创建主键。

  • 寻找加了unique约束并且不为NULL的列设为主键。
  • 如果没有,把row_id作为主键

    • InnoDB在每行记录都添加了三个隐藏字段
    • DB_ROW_ID —6个字节:行的标识;
    • DB_TRX_ID —6个字节:新增更新行的最后一个事务ID,自动递增(创建版本号,数据库的乐观锁相似);
    • DB_ROLL_PTR —7个字节:回滚指针(删除版本号)

4. MYSQL分区

1. 分区类型

  1. range(范围)
  2. list(离散、不连续)
  3. hash(散列)
  4. key
  5. 子分区 –在分区的基础上进行分区
    • 关键字 subpartitions
    • 子分区数量必须相同
  6. columns分区

2. 创建方式

create table `table_name`(  
   a int,b int
)engin=innodb 
partition by key(b)
partition 4;  
另外在MYSQL数据库中还支持一种称为linear hash的分区,他使用一个更加复杂的算法来确定新行插入已经分区表中的位置。
create table `table_name`(
  a int,b int;
)engin=innodb
partition by linear hash(b)
partition 4; ---指定分区数  
  

linear hash 的优点在于,增加、删除,合并和拆分将变得更加快捷,有利于处理含有大量数据的表;
他的缺点在于与使用hash分区得到的数据相比,各分区数据的分布可能不太均衡。