列总是不应该设置的太长的,除非每次查一定是要这么长的键内容。
我们可以看到,从存储引擎到服务器层面,是用行缓冲去copy数据的,在服务器层再解码成各个列。
如果无意义的列太多,是会消耗大量的CPU资源的。
范式、反范式是什么?
教科书里很大的一个问题,就是承载着概念的词,也可以叫术语,如果没有学习过这种概念(术语),那么一个人很难知晓,这个词到底代表什么,到底是什么意思。
而这种词可能就只是一小部分人约定俗成的,不同的行业,同样的术语可能都代表不同的意思。感谢互联网,可以轻松查找这些词对应的概念,如果是以前那种网络不通的年代,那不得翻遍图书馆的书才行么。
通俗一点讲,范式就是将那些可以分表的列给分出来的这一种思想。
而反范式,就是合列的这种思想。
不是说全部能分的都分,全部能合的都合,并不是这样的,这是两种方向,具体的度每个人自己把握。
日常业务中应该很容易碰到这种把握,到底是合列好,还是分表好。
范式:”分表的好处就是更改的话,很方便,但是查找多表数据的话,需要多次查找,因为要拼接嘛。以时间换空间。
反范式:不分表的好处,就是一次查询一张表,可以得到所有需要的数据,但是需要更改一个键的时候,需要把所有用到这个键的行给改掉。以空间换时间。
没有绝对的标准,只有最合适的。
计数器表的话,用redis替代比较好,个人不太推荐在mysql上做这么频繁的操作,比较慢是真的
对ALTER TABLE的优化
这个sql语句是对表列属性的改变哦?
不一定要重建表,移动全表数据才能改变。
可以直接修改.frm文件里的属性(但是mysql不支持哦)
如果只是改默认值的话,可以的
ALTER TABLE xxxx.xxxx
ALTER COLUMN xxxx SET DEFAULT X;
hack操作
新建一个结构跟老表一模一样的表,然后用这个新的表的frm文件替换老表的frm文件。。。
只有在表结构最后加键才有效,不过具体情况需要实际操作了之后才知道,操作前,先备份好数据吧。
ps:FLUSH TABLES WITH READ LOCK记得关闭所有正在使用的表
快速创建MYISAM索引
将数据导入到MYISAM表中时,可以先禁用除唯一索引以外的索引。增加新列,再把原来的索引加进去。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
hack操作,咱小虾米还是不要轻易尝试吧,搞不好翻车了得不偿失,还是求稳吧。