开发者社区> wangtaotao> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

赶集网dba石展分享归纳

简介: 字段不要使用null值。查询,索引方面不利。如果是整型,int,仅仅是设置 not null还不够。最好是这种一个默认的值0。为什么?text类型处理性能低于varchar。尽量不要使用text/blog数据类型,使用的话。
+关注继续查看

字段不要使用null值。查询,索引方面不利。
如果是整型,int,仅仅是设置 not null还不够。最好是这种一个默认的值0。为什么?

text类型处理性能低于varchar。
尽量不要使用text/blog数据类型,使用的话。拆分到单独的表中存储。

与阿里巴巴一个思想:大容量的数据不要存到数据库中去,比如图片,url。


将字符存储转换为数字存储。比如ip用int存储。
为什么字符型数据建立索引,索引的名称要建立前缀:idx_pinyin
是考虑字母的区分度吗?字母越长越容易区分?

它们习惯建立索引的命名规则是:idx_字段名。


拒绝大SQL,拆解成多条简单SQL。对于高并发的情况下,非常有利,避免一条复杂的sql语句把表锁死。
由于一条sql只能在一个cpu中计算,那么最好是做简单的sql,可以减轻cpu负担。

简单sql的缓存命中率更高。

多条sql合并成一条复杂的sql一步解决的思路,是传统的思想。对于互联网高并发,要求高性能的情况下,不适合。
思想:把复杂的东西拆分成小步骤。一个一个做。一次性去做复杂的。耗费很多时间。


尽量少用外键,尽量少用存储过程。少用触发器。
减少使用mysql函数对结果进行处理。

作者也是强调,需要多少字段就用多少字段。

将or改为in。in的效率要更高。建议n数量小于200。不同的字段进行or查询的时候。比如 "a=x or b=y"将or可以修改成union,
where a=x union b=y。同一个字段做成in比较好。in(1,2,3)。不同字段没办法。




联想起一道题目,将or中的顺序指定。是不是使用in就解决了?


select catid from jay_category where catid=1 or catid=6 or catid=4
无解。or 默认是按照id,从小到大列出的。


实时统计:用memcache,双向更新,凌晨跑基准。
非实时统计:尽量用单独统计表,定期重算


把join连接查询,拆分成单条sql语句,分多不操作。性能要高。可以减少大并发情况下锁表。

作者告知,remark=115127 与 remark="115127"的查询性能是有区别的。使用引号速度更快。不知道什么原因。


批量导入数据方面:
尽量不要使用INSERT ... SELECT延迟同步出错。复制可能出现异常情况。
成批插入比当行插入更快,所以:insert values,values的速度要比拆分成多条
插入语句速度要快。符合成批载入数据比单行载入数据要快。
可以考虑大数据载入的时候用load data

大一点的公司。程序员编写的每条sql都会经过dba进行分析确认,这样保证性能。
dba毕竟是专业的数据库人员。对于数据库的原理,查询性能优化有丰富的经验。

一个单表,数据量在500万-1000万的时候就要考虑分表。所以使用bigint是没有多少实际一样的。

int(10) 与int(1)所存储的数据额度其实是一样的。后面的10表示是宽度。就是每个值存储的时候占用多少个位数。


他的思维:从存储空间角度去考虑。存储空间越少。对性能影响越好。

在传统的数据库系统中,是建议,尽量使用更少是sql完成更多是事情。也就是尽量少到使用一条sql实现查询
但是在mysql中就不适合,因为mysql被设计成适合高效的连接和断开,响应查询。所以很适合拆分成多条sql去实现。
假设一个情况:在5000个qps中(每秒响应5000个sql请求),如果一条sql查询超过了一秒,就会导致整个拖慢,就像现实生活中,堵车,只要其中一辆车抛锚了,就会导致所有的车都无法前进,被卡死了。本身道路宽度就有限。

有个思想:现实生活中,堵车,道路宽度有限。如果单纯依靠扩宽道路来解决交通问题,是解决不了根源问题的,因为道路宽度即便扩宽,也有更多车去拥挤,扩宽是有极限,扩到不能扩了才麻烦。应该是一种调度思想。


数据库的连接:即用即关掉。马上关掉。即便是后面代码需要用到,也可以马上关掉,然后再次连接
发帖:数据先insert into入表。然后图片要传入图片系统。他建议是insert数据后。要关掉数据库连接。这样子可以避免一个问题:如果图片系统出现问题。数据库连接一直没关掉,就会导致大量sleep等待。


永远不要用程序对数据库显式的加锁。加锁是方便。但是会造成一些不可控的问题:把海豚绑死了。它怎么跑得快?
调试和排查问题很难(很难找到是那段程序加了锁,php执行的时候是一个代码副本)。高并发情况下很危险。


如果涉及到需要锁定的,使用事务机制,相对值修改、commit前二次校验冲突。

表的字段数控制在20-50个字段。50个纯int字段。20个char字段。计算方式:
硬盘3秒以上

单表的体积控制在1g。char类型大约是500万行数据
1g/500万=200个字节 20个字段
1g/1000万


他们会把left join查询拆分成多次去获取数据。a left join b 先从a表获取where条件的数据,然后又去b表聚合(这个时候就释放了对a表的锁)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SLS(日志服务)进入 DB-Engine
2020年4月,日志服务(Log Service,SLS)被DB-Engine收入,作为类Search Engine类型的泛数据库。
1491 0
DLA SQL分析函数:SQL语句审计与分析的利器
1. 简介 Data Lake Analytics(https://www.aliyun.com/product/datalakeanalytics)最新release一组SQL内置函数,用来进行SQL语句的分析、信息提取,方便用户对SQL语句进行语法层面的审计、分析,可以应用于很多安全、数据库日志分析等场景。
1231 0
漫画: DBA和小D的日常
阿里云CloudDBA,凝聚阿里资深DBA多年经验,给您的数据库配备一个智能小助手!让我们通过一副漫画来了解它!
3265 0
《MySQL DBA修炼之道》——2.3 其他MySQL分支的安装
本节书摘来自华章出版社《MySQL DBA修炼之道》一书中的第2章,第2.3节,作者:陈晓勇,更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.3 其他MySQL分支的安装 一些其他MySQL的分支,提供了更高的性能和更多的特性,如Percona Server、MariaDB等,它们的二进制版本安装类似于官方版本,读者可参考对应分支的安装文档进行部署安装。
1259 0
【工作】蚂蚁金服招DBA
一 主要职责 1.负责数据库高可用体系建设,追求100%的服务持续可用、秒级故障恢复能力。 2.负责数据库成本优化,通过新技术、新产品、新方案全方位地优化系统性能。 3.负责数据库相关流程平台和工具产品的建设,持续改进业务研发和系统维护效率。
1522 0
招聘DBA
职位名称:MySQL DBA 公司名称:互动百科( www.hudong.com) 薪酬待遇:有竞争力 工作地点:北京朝阳区安定门外安苑里1号奇迹财富广场互动百科大厦 岗位职责: 1、建立和完善MySQL数据库的日常维护计划,保持数据库的正常运作 2、监控MySQL数据库...
695 0
UI前沿技术:XNA颜色滚动程序
导读:在2011年1月的MSDN杂志中,MSDN长期特约编辑Charles Petzold发表了一篇有关“XNA颜色滚动程序”的文章 全文如下 我最早编写并发布的 Windows 程序之一名为 COLORSCR(“颜色滚动程序”),发表在本杂志的前身 Microsoft Systems Journal 的 1987 年 5 月号中。
901 0
+关注
wangtaotao
专注于互联网系统设计
文章
问答
文章排行榜
最热
最新
相关电子书
更多
DBA日常修炼咒-个人成长感受分享
立即下载
产品经理的硬技能——业务建模
立即下载
产品经理的硬技能-业务建模
立即下载