当前位置: 首页 > news >正文

无锡网页建站公司星河东莞网站建设

无锡网页建站公司,星河东莞网站建设,seo如何快速出排名,帮客户做违法网站违法么转自#xff1a; https://book.douban.com/review/8122660/ 版权归作者所有#xff0c;任何形式转载请联系作者。 作者#xff1a;姚泽源#xff08;来自豆瓣#xff09; 来源#xff1a;https://book.douban.com/review/8122660/ 在知乎上发过一次#xff0c;这里也发一…转自 https://book.douban.com/review/8122660/ 版权归作者所有任何形式转载请联系作者。 作者姚泽源来自豆瓣 来源https://book.douban.com/review/8122660/ 在知乎上发过一次这里也发一遍吧 --------正文开始-------- 草草翻完了《高性能MySQL》印象最深的地方就是这确实不适合初学者去看。 花了三个月的时间慢慢看完了这本看的一头雾水。第一章概论讲了不少新奇的概念比如隔离级别比如多版本并发控制(MVVC)。但是从第二章起所讲的内容基本就和日常应用没什么太大关系了。如果要简单概括一下的话就是 1. 储存引擎务必使用InnoDB 2. 创建新数据库时要用最新的MySQL版本(当然是GA版) 3. 轻易不要升级MySQL 然后就没了。对于其他的内容不管是服务器性能优化还是MySQL主从备份这些其实都和一名普通的技术人员没有关系。相较于书中提到的通过修改frm文件实现快速新增列这种神奇方法技术人员最好的做法还是尽可能的避免使用alter语句或者说在项目一开始时就要想好数据表的用途。如果你是想改进自己的SQL水平的话那应该去看 SQL快速优化300例 ,至少不是这本书。 写一下收获吧(SQL相关不仅仅是MySQL)毕竟翻完了不是。 1. 尽量避免在线上使用alter 在使用alter新增列时,会引发一个全表锁数据库会暂停响应直到新列添加完成(在已有数据中添加新列,在数据库表结构中添加列定义)。锁定的时间随表内数据量的大小线性增长。如果是在线上环境的话即使很短的时间也够阻塞不少请求了←_← 2. 可以通过冗余数据来提升SQL查询的性能 在标准的数据库教科书中数据表结构按说是要符合范式要求的(1NF~5NF)。比如通过把用户信息和订单内容独立开这样就可以设计出来没有冗余数据的数据库表结构——俗称学院派数据库表结构。但是学院派依托的环境是银行系统这样的大型工程查询带来的性能损耗远小于冗余数据带来的损耗。但在真实应用中表里的数据很少能达到1000万行以上的在这时大部分的性能全浪费在多次查询上了。这时候学院派的做法就不如直接在数据表中添加冗余数据(例如把用户手机号和订单一起存取),这样在展示的时候一条SQL就可以搞定。 gt; 『PHP绝大部分的性能都浪费在和MySQL服务器通讯上了』 3. 使用tinyint或者varchar作为枚举类型而不是使用enum 理由很简单: enum在新增类型的时候需要使用alter语句进行全表新增线上数据库时不时的来上一回全表锁谁受的了。。。 一般来说使用 tinyint 代码中利用常量进行定义 是最好的方案如果要增强可读性的话可以使用varchar, 因为常量一共也不超过10个字母从性能上来说varchar也可以接受 4. 可视化工具 客户端的话个人建议使用adminer,有ngnix之后配上一个index.php文件就能用。非要使用客户端的话用MySQL Workbench也可以MySQL自己出的。这两个都在《高性能MySQL》的推荐之列可以考虑 5. 使用调试语句查看性能 常用的调试语句如EXPLAIN, SHOW这种现用现查即可 6. 索引数据一般都在内存里 结论:排序时直接使用索引排序是最快的,索引不要太多太多之后跟把整个表放内存里就等效了(还不如使用Redis) 补充:排序时EXPLAIN发现不是index,而是filesort也不用太担心因为只有这两种状态不是index就是filesort性能只要不是太坑直接上就行 7. 分表分库历史数据独立建表 MySQL处理1000万行以下的数据时性能是非常好的——那1000万行以上时怎么办呢 直接分表啊。 比如可以按时间分自增id在500万之前的独立分到一个表里在程序代码里写死用到的时候再去读 或者按一个数取模根据余数选择对应的表。 8. 对于重要数据一定要开启二进制日志 手滑删过全表的同学都懂。。。 然后解释下两个概念 1. 隔离级别 每执行一次SQL称为一件事务如果事务所涉及到的内容在事务进行中发生了改变对应于事务所能读取到的实际内容就产生了四种标准情况这四种标准情况被称为四种隔离级别(仅就MySQL而言对于其他数据库实现可能会有不同的区分标准) 1. READ UNCOMMIT(未提交读) 在READ UNCOMMIT级别中即使没有提交每个事务的操作对于其他事务也都是可见的。在这种情况下事务可以读取未提交的数据又称脏读(DIRTY READ)。从性能上来说脏读并不比其他模式优秀多少但是会引发各种严重的问题(比如说银行存款数据写入到一半来了一个读操作。。。)。一般情况下不建议使用 2. READ COMMIT(未提交读) 大部分数据库系统默认的隔离级别都是READ COMMIT(但MySQL不是)。在READ COMMIT这一级别中事务所修改的数据只有提交了之后才会被其他事务读取到。换句话说一个事物从开始之后到结束之前所做的任何修改对其他事物都是不可见的。这个级别实际上已经比较符合我们读取数据的预期了。但是如果执行两次同样的查询可能会出现两遍结果不一致的情况(查询执行过程中有其他事务提交完成),所以这一级别又叫不可重复读(nonrepeatable read) 3. REPEATABLE READ(可重复读) REPEATABLE READ解决了脏读的问题同时也是MySQL的默认事务隔离级别。这一级别保证了在同一个事务中多次读取同样的记录结果是一致的。但是理论上可重复读还是没法解决幻读(Phantom Read)的问题。幻读是指在某个事务读取某个范围内的的记录时(idgt;1 amp;amp; id lt; 100),另外一个事物又再该范围内插入了新纪录当之前的事务再次读取该范围的记录时就会产生幻行(Phantom Row)。不过InnoDB通过多版本并发控制(MVVC, Multiversion Concurrency Control)解决了这个问题 4. SERIALIZABLE(可串行话) SERIALIZABLE是最高的隔离级别。它通过强制让事务串行执行可以避免前面所说的全部问题。本质上说SERIALIZABLE会在读取的每一行数据上都加上锁, 对性能影响非常严重。只有在非常需要确保数据一致性且可以接受没有并发的情况下才可以考虑使用此级别 2. 多版本并发控制 这是个很玄乎的词但说白了就是通过保存数据在某个时间点的快照来确保对于不同开始时间的事务他们对于同一张表在同一时刻看到的数据都是一样的。 对于InnoDB来说就是通过在每行记录后边保存两个隐藏列一列记录创建时间一列记录过期时间实际上存储的是系统版本号,每开始一个事务系统版本号都会自动递增。在事务开始时刻的系统版本号就会作为事务的版本号用来作为数据库查询的依据以此实现多版本并发控制 大致就这些。看起来很高大上的一本书实际上看了跟没看差不多(DBA除外)。不推荐阅读/购买 但我对高性能mysql的印象蛮好的推荐阅读。
http://www.zqtcl.cn/news/442645/

相关文章:

  • 社区智慧警务网站如何推进警务室建设方案广东网络推广服务
  • 东莞艺美网站建设wordpress get header
  • 做玩具什么 网站比较好网址域名
  • 网站做用户登录中国建设部官方网站资格证查询
  • 济宁网站建设公司大型餐饮网站建设
  • 昊源建设监理有限公司网站做那种的视频网站有哪些
  • wordpress滑块代码seo外链增加
  • 衡阳网站建设公司地址书店网站怎么做
  • 如何检查网站是否做cdn加速html网页基础代码
  • 做网站的岗位好吗钓鱼网站到底怎么做
  • 大连做网站那个公司最好wordpress+高清背景
  • 怎样做网站xml案例建网站
  • 海口发布最新通告用二级域名做网站对seo
  • 网站301重定向 权重转移网站不用下载免费软件
  • 网站系统升级昆明做百度网站电话
  • 电子商务与网站建设实践论文wordpress 主题目录
  • 网站页面打不开中小企业网站推广
  • 佛山建网站企业网站怎么维护
  • 网站制作报价明细wordpress喜欢
  • 网站开发2008文化传播有限公司网站建设
  • 个人账号如何注册网站广州专业网站改版设计公司
  • wordpress视频网站采集沈阳建设工程质量检测中心网站
  • 做网站优化哪家好远程管理wordpress站群
  • 实用写作网站做企业策划的公司
  • 如何建立自己手机网站58招聘网站官网
  • 网站程序源码下载网站怎么做定位功能
  • 深圳vi设计公司联系西安seo诊断
  • 老虎淘客系统可以做网站吗绍兴网站专业制作
  • 小公司做网站需要 align center
  • 自己做的网站怎么上传网络什么网站可以找人做系统