MySQL错误信息1356
错误:1000 SQLSTATE: HY000 (ER_HASHCHK) 消息:hashchk错误:1001 SQLSTATE: HY000 (ER_NISAMCHK) 消息:isamchk错误:10...
2024.11.15分表
MySQL 的分表是真正的分表,一张表分成很多表后,每一个小表都是完整的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文件,.frm表结构文件。
分区
一张大表进行分区后,它还是一张表,不会变成多张表,但是存放数据的区块变多了。
分区对业务代码开发来说是透明的。
MySQL5.6 或以上版本,需要使用下面的查询命令:
show plugins;
上面的查询方法会显示所有插件,如果有红色框的记录(ACTIVE),表示支持分区。
分表和分区Partition 比较分区(Partition)比较简单,由数据库自身维护数据关系。分表比分区更复杂,但是性能稍微好一点点。但分表会造成业务代码更复杂,要通过代码指定数据存储到特定的表。错误的分表操作,容易引发其他问题。数据库分库(物理层面进行拆分)跨库Join的问题,虽然可以通过基础表多数据库同步复制来解决,但也增加了复杂度。不同业务的拆分:编程复杂(根据业务选择对应的数据库),做关联业务联级操作的时候,有分布式事务的问题。同一类业务的拆分:编程复杂,尤其在涉及到复杂业务查询时,有可能需要多库多次查询,然后进行结果集合并。MySQL 分区、分表、分库1. 分区、分表、分库都可以大幅提升数据库读的性能。
2. 数据库分库可以提升并发写的速度:通过简单的hash取余、日期时间、或业务区域等等,来拆分同一类业务数据(如订单数据)。或者通过不同业务领域,来拆分不同业务数据(商品、客户、订单、采购等等)。
3. 分区最简单,由数据库自身维护数据关系;
分表复杂,需要开发人员指定数据读写在哪张子表;
分库最复杂,除了为对应的数据选择对应的数据库以外,还需要解决跨库的分布式事务问题。
4. 分区、分表、分库并不冲突,比如在读写分离的业务场景,对读的数据库的某些表进行分区或者分表。或者对于一些容易编程的业务表采用分表,编程复杂的业务用分区,都是可行的。
一主多从,读写分离除了通过MySQL分区、分表、分库来提升性能之外,还可以通过相对比较简单的读写分离来提升性能。
读写分离,同时提升了数据库单机的读和写的能力,主库负责写和极少部分的即时性要求高的读,从而提升写的性能。从数据库只要负责读,通过二进制日志的形式批量写,并保持数据和主库一致,合作分工,同时提升读写的性能
一主多从下,从库是水平扩展了多个数据库来分摊读的请求(即时性要求不高的读请求),以前一台数据库既负责读又负责写,现在多台数据库分摊读的请求。
适用场景:大部分的读操作对数据的实时性要求并没有那么高,一般对时延的容忍在秒级以上。
错误:1000 SQLSTATE: HY000 (ER_HASHCHK) 消息:hashchk错误:1001 SQLSTATE: HY000 (ER_NISAMCHK) 消息:isamchk错误:10...
2024.11.15引言一般来说讲,提到数据拆分,可以归结为两个层面:一是垂直拆分,二是水平拆分。这里我们来讨论下垂直拆分。垂直拆分是以数据库、表、列等为单位进行拆分的方法。正文MySQL里垂直拆分可以细分为:垂直拆库(...
2024.11.15聚簇索引就是innodb默认创建的基于主键的索引结构,而且表里的数据就是直接放在聚簇索引里,作为叶节点的数据页:基于主键的数据搜索:从聚簇索引的根节点开始进行二分查找,一路找到对应数据页,基于页目录就...
2024.11.11前言当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一...
2024.11.14一、什么是MySQL数据库?MySQL是一种快速、可靠、可扩展且易于使用的开源关系数据库系统,旨在处理关键任务、高负载的生产应用程序。它是一种常见且易于启动的数据库,内存、磁盘和CPU利用率较低,由关...
2024.11.08