MySQL数据库设计与查询20140410.pdf

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MySQL数据库设计与查询20140410.pdf

互联⺴软件架构漫游指南 ⾼性能的MySql数据库 设计与查询 Leap@BestApp 核⼼思想 • 让MySql做他最擅⻓的事情: • 数据库是⽤来存储和查询数据的! • 尽量不要在数据库做复杂的统计分析运算,复杂 运算放在后台程序⾥进⾏!(count、sum、 min、max、avg、group by) • 尽可能的减少数据库查询次数: • 不要在循环中查询数据库,特别是循环次数不确 定的时候。 核⼼思想 • N+1问题 • Client.limit(10).each do |client| • puts client.address.postcode • end • 上⾯的实现会执⾏11次数据库操作(clients表1次,addresses表10次) • SELECT * FROM clients LIMIT 10 • SELECT addresses.* FROM addresses WHERE addresses.client_id = 1 • … • SELECT addresses.* FROM addresses WHERE addresses.client_id = 10 • Client.includes(:address).limit(10).each do |client| • puts client.address.postcode • end • 这个实现只会执⾏两次数据库操作(clients表1次,addresses表1次) • SELECT * FROM clients LIMIT 10 • SELECT addresses.* FROM addresses WHERE (addresses.client_id IN (1,2,3,4,5,6,7,8,9,10)) 表设计 • 数据规模: • 单库数据表的数量控制在300张以内。 • 单表记录数超过100W就要开始考虑分表,超过 500w就必须进⾏分表。 • 单表字段数根据字段类型,控制在20〜40个。 表设计 • 主键: • 每张表都要有唯⼀的主键 • 主键由数据库或者主键⽣成系统统⼀维护 • 主键⼀旦写⼊,禁⽌修改 • 禁⽌使⽤数据库⾃带的外键约束: • 不在数据库内创建外键约束,外键约束由程序控制 • 禁⽌使⽤存储过程、触发器、视图、计划任务 表设计 • 字段类型: • 可变⻓字段使⽤varchar类型,字段⻓度超过4000时,必须和原 表进⾏分拆 • 仅当需存储的字节数可能超过20000时,使⽤TEXT系列类型,必 须和原表进⾏分拆 • 精确到天的时间字段使⽤DATE类型 • 精确到秒的时间使⽤DATETIME类型 • 尽量不要使⽤null字段,为可能为空字段设置默认值。 • 取值有限的字段(性别、民族等),使⽤ENUM代替VARCHAR 表设计 • 索引: • ⼤幅提⾼查询操作速度,但是会降级变更操作的速度,需要消 耗额外的存储空间。所以索引不是越多越好。 • 每个查询只能使⽤⼀个索引,在where⼦中使⽤了,就⽆法在 order by⼦句中使⽤,除⾮两者能使⽤同⼀个索引。 • 索引不会保存索引列全为NULL的记录 • 字符字段必须且只需要建前缀索引 • 根据SQL语句的执⾏频率来决定索引的建⽴ • 数据重复度⾮常⾼的字段不需要建索引 表设计 • 单

文档评论(0)

ziyouzizai + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档