随笔分类 -  Mysql

摘要:mysql的alter table操作的性能对打表来说是个大问题。 mysql执行大部分修改表结构的方法是用新的结构创建一个空表,从旧表中查出所有的数据插入新表,然后删除旧表。这样操作就可能需要花费很长时间,如果内存不足而表又很大,而且还有很多索引的情况下尤其如此。 一般而言大部分AlterTabl 阅读全文
posted @ 2020-04-04 23:24 l2c 阅读(307) 评论(0) 推荐(1)
摘要:1.冗余一列做排序 2.缓存衍生值列。 3.缓存表和汇总表 实时计算统计值是很昂贵的操作,因为要么需要扫描表中的大部分数据,要么查询语句只能在某些特定的索引上才能有效运行,而这类特定索引一般会对update操作有影响,所以一般不希望创建这样的索引 4.影子表 阅读全文
posted @ 2020-04-04 22:12 l2c 阅读(144) 评论(0) 推荐(0)
摘要:1.太多的列: mysql的存储引擎api工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的。 2.太多的关联 mysql限制了没哥关联操作最多只能有61张表,单个查询最好在12个表以内做关联。 阅读全文
posted @ 2020-04-04 21:44 l2c 阅读(104) 评论(0) 推荐(0)
摘要:1.更小的通常更好 选择不会超过范围的最小类型 2.简单就好 例如,整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整形比较更复杂。 3.尽量避免null 如果查询中包含可为null的列,对mysql来说更难优化,因为可为null的列使得索引,索引统计和值比较 都更复杂。 可为n 阅读全文
posted @ 2020-04-04 15:47 l2c 阅读(229) 评论(0) 推荐(0)
摘要:1.show table status like 'user' 2.alter table mytableEngine=InnoDB 需要执行很长时间,mysql会按行将数据从原表复制到一张新的表中,消耗大量i/o,原表上会加上读锁。 3.insert into innodb_table selec 阅读全文
posted @ 2020-03-27 22:48 l2c 阅读(127) 评论(0) 推荐(0)
摘要:READ UNCOMMITTED(未提交读) 在READ UNCOMMITTED级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也被称为脏读。(Dirty Read)。这个级别会导致很多问题,从性能上来说,READ UNCOMMITTED不会比其他的级别好太多, 阅读全文
posted @ 2020-03-17 21:39 l2c 阅读(118) 评论(0) 推荐(0)
摘要:存储引擎负责Mysql中数据的存储和提取。服务器听过API与存储引擎进行通信,这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。但存储引擎不回去解析SQL,不通存储引擎之间也不回相互通信,而只是简单地响应上层服务器的请求。 每个客户端链接都会在服务器进程中拥有一个线程,这个连接 阅读全文
posted @ 2020-03-16 23:12 l2c 阅读(115) 评论(0) 推荐(0)