您的位置:首页 > 数据库 > MySQL

mysql常见问题分享 - baidu

2015-11-18 20:45 375 查看
今天就记录这些, 给大家分享一下

mysql常见问题分享 - baidu

百度数据库-架构

多点写入 – 队列 会造成数据不一致

中间层 具有 : 读写分离, 连接池,负载均衡, – 中间层不能有问题

使用虚ip obproxy

BGW_VIP&PORT + ttm + DBPROXY_PORT - 一组ip 百度的使用的架构

mysql优化 - 对的,错的, 不确定

建议用innodb b+树

索引

主键 有序 便于查找- b+树存储, 聚簇索引的叶子节点存放

查找的值相对于原表较少, 建议用索引 eg 1000w 检索1条数据使用索引

一个表不建议超过5个索引

通过索引日志, 进行删减索引

mysql只能用一个索引 可以用联合索引

mysql索引的使用取决与b树的结构

相同的语句执行多次可能会使用索引不一致, - 进行优化

explain调试 支持select 如果使用delete 可以转化为select 因为delete

explain 主要kan key:使用的索引类型, rows扫描的行, Extra

组合索引 (a,b,c) a,c | b,c不会使用索引 原因在于B树的数据结构特性造成的

mysql使用原则

数据量, 流量, 复杂度 - 不能同时满足

量小 没有啥大问题

数据量大,查询要慎重 - 注意反作弊 ,有好多不可控性

设计技巧和规范-常见问题

字段类型不匹配

1条sql和多条sql的性能 - 1条复杂的sql 会产生一些临时表, 还会阻塞其它的 - 主从

auto_commit = 0

ctrl+c 不能中断 mysql请求

int是否够用? – 记录形式的 – 增长量不可控用 bigint

数据库计数? select count(*)在innodb上表不会存 会造成扫描全表 页面上的 统计不要在数据库上统计

大结果集 – 可以对id分段-在拼接, 否则会造成网卡堵塞

数据库中有热数据的概念 是否有用的sql

设计技巧和规范-表设计

单表不要超过1000w , 超出考虑分表

可以适量增加冗余减少表关联

设计技巧和规范-增删改查类

不要在备库中进行 大的统计查询 - 会不精准

多条的insert拼接成一条提交效率会高

批量update和delete 可以采用 delete from table where id in (id 100个左右)

删除数据多, 要命中索引, 增加limit –可以利用主键的自增的特点,

捕获数据库反馈的错误信息 打印到日志中

尽量使用cache 数据量小可以用

避免查询结果超过正常的需求– 要有价值的数据显示出来就可以了

减少表的关联, 大表/主表

尽量减少distinct like group by order by ,union

尽量不用子查询, 子查询 会锁表, 效率低

设计技巧和规范-分库分表

按行数

分段取模

按时间

压测工具

tdpcopy

rd和dba合作的流程

今天非常有幸听了百度db一位同事讲解mysql 受益匪浅

来自资审db高端人才 xxx [这里不方便透露人家的姓名] 具有5年sql经验

资源我已经上传到csdn上了不用积分的, 大家可以参考下

PPT 下载地址

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 数据库 百度