MySQL数据库设计与查询20140410

MySQL数据库设计与查询20140410

ID:46272572

大小:532.31 KB

页数:19页

时间:2019-11-22

MySQL数据库设计与查询20140410_第1页
MySQL数据库设计与查询20140410_第2页
MySQL数据库设计与查询20140410_第3页
MySQL数据库设计与查询20140410_第4页
MySQL数据库设计与查询20140410_第5页
资源描述:

《MySQL数据库设计与查询20140410》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、互联网软件架构漫游指南!高性能的MySql数据库设计与查询Leap@BestApp核心思想•让MySql做他最擅长的事情:•数据库是用来存储和查询数据的!•尽量不要在数据库做复杂的统计分析运算,复杂运算放在后台程序里进行!(count、sum、min、max、avg、groupby)•尽可能的减少数据库查询次数:•不要在循环中查询数据库,特别是循环次数不确定的时候。核心思想•N+1问题•Client.limit(10).eachdo

2、client

3、•putsclient.address.postcode•end•上

4、面的实现会执行11次数据库操作(clients表1次,addresses表10次)•SELECT*FROMclientsLIMIT10•SELECTaddresses.*FROMaddressesWHEREaddresses.client_id=1•…•SELECTaddresses.*FROMaddressesWHEREaddresses.client_id=10!•Client.includes(:address).limit(10).eachdo

5、client

6、•putsclient.address.post

7、code•end•这个实现只会执行两次数据库操作(clients表1次,addresses表1次)•SELECT*FROMclientsLIMIT10•SELECTaddresses.*FROMaddressesWHERE(addresses.client_idIN(1,2,3,4,5,6,7,8,9,10))表设计•数据规模:•单库数据表的数量控制在300张以内。•单表记录数超过100W就要开始考虑分表,超过500w就必须进行分表。•单表字段数根据字段类型,控制在20~40个。表设计•主键:•每张表都要有唯一的主

8、键•主键由数据库或者主键生成系统统一维护•主键一旦写入,禁止修改•禁止使用数据库自带的外键约束:•不在数据库内创建外键约束,外键约束由程序控制•禁止使用存储过程、触发器、视图、计划任务表设计•字段类型:•可变长字段使用varchar类型,字段长度超过4000时,必须和原表进行分拆•仅当需存储的字节数可能超过20000时,使用TEXT系列类型,必须和原表进行分拆•精确到天的时间字段使用DATE类型•精确到秒的时间使用DATETIME类型•尽量不要使用null字段,为可能为空字段设置默认值。•取值有限的字段(性别、民族

9、等),使用ENUM代替VARCHAR表设计•索引:•大幅提高查询操作速度,但是会降级变更操作的速度,需要消耗额外的存储空间。所以索引不是越多越好。•每个查询只能使用一个索引,在where子中使用了,就无法在orderby子句中使用,除非两者能使用同一个索引。•索引不会保存索引列全为NULL的记录•字符字段必须且只需要建前缀索引•根据SQL语句的执行频率来决定索引的建立•数据重复度非常高的字段不需要建索引表设计•单列索引•组合索引•最左前缀原则•合理安排where子句中各个条件的顺序,充分利用组合索引,减少单列索引的

10、数量。表设计•最左前缀原则•在orders表上按照user_id、product_id和depot_id的顺序,建立了复合索引。•那么当查询的where条件以user_id为第一个查询条件时,都可以使用到索引。SQL查询优化•禁止使用:select*from…•浪费内网带宽,增加CPU和内存的消耗。•指定需要的字段:selecta,b,cfrom…•降低表字段变更对程序的影响。•不要使用不走索引的查询语句。•如果一定要使用like进行模糊查询,禁止使用左模糊(%xxx),可以使用右模糊(xxx%)。SQL查询优化!

11、•尽量减少在查询中使用count关键字,资源消耗很大。•除非是统计特定字段的非空记录数,不要使用count(列名),使用count(*)。•实时统计可以考虑在外部缓存系统中进行(redis),然后在低负载时段定期同步基准数据。•非实时统计同可以在低负载的凌晨进行运算,将运算的结果单独保存在统计表中。SQL查询优化SQL查询优化•尽量不要写大SQL语句(连接多个表,复杂的查询条件,大量删除)•一条SQL语句只能在一个CPU内核上执行•大SQL可能会卡住整个数据库•难以利用现有缓存•将大SQL拆分成多个简单的小SQL•

12、发挥多核服务器性能•减少锁表时间•提高缓存利用率SQL查询优化•selectusers.id,users.name,users.avatar,comments.contentfromcommentsinnerjoinusersoncomments.user_id=users.idwherecomments.id=2!•selectuser_id,conten

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。