mysql数据库优化(一)
在实际项目中,通过设计表架构时,设计系统结构时,查询数据时综合提高查询数据效率
1.适当冗余
数据库在设计时遵守三范式,同时业务数据(对数据的操作,比如资料审核,对某人评分等)和基础数据(比如资料详情,用户描述等)要分开存储,放在不同表中。在设计数据库时,三范式能够最大限度的节省 数据库存储所需的空间,可是缺点是 在查询,修改等操作时,会造成查询缓慢,效率低下。所以对于经常查询的字段应该适当的添加到同一个表中,适当冗余,不必严格按照三范式进行设计,这样 通过舍弃部分存储空间,提高查询效率,能够得到更好的用户体验。
For example:用户基本信息表(用户名,密码,身高,体重,三围),用户信息审核表(审核状态,用户id);系统需求:要求显示审核结果时知道每个用户的用户名和审核状态;那么严格按照三范式,需要查询两张表;如果把用户名添加到 用户信息审核表 中时,只需查询一张表,查询时间肯定小于多表查询。
冗余字段添加条件:经常进行查询的字段放在同一个表中,避免多表查询
2.数据查询时,少用in进行查询
in进行的是全表查询,不使用索引
For instance:
用关联查询:
用in进行嵌套查询:
所以尽量少用in进行查询,多用其他的进行代替;如 between 2 and 4 代替 in (2,3,4) 等等。
3.尽量少设置外键关联
在项目初期进行版本迭代时,对于以后版本无法预测的变更,尽量少使用外键关联,减少表间依赖强度,为以后版本设计提供基础。因为外键关联时,修改删除等操作非常繁杂。
在保证数据完整性时,尽量少设置外键关联,省去每次查询外键是否存在的时间。比如 国家免检产品,在保证产品质量(本表)的前提下,充分相信制造商(外键对应的表)
4.使用redis缓存机制
对于重复查询,没有改变的数据,可以使用redis缓存机制,直接访问内存数据,不再访问数据库,减少访问数据库的时间(数据库在硬盘上,redis缓存在内存中)。思路是:读取数据库数据到redis缓存中,从redis中取数据给前端。如果涉及到数据修改不大的,可以修改到redis中,固定时间同步到数据库,保证数据统一完整性。
5.查询时 尽量不要用 select * from tables;
*代表取表中一组数据到内存中,增加内存消耗,只取需要的字段,如 select id from tables;
在python的sqlalchemy库时,尽量不要用 Table.query.filter_by(id=1).first() ==》select * from Table where id=1 ;应该使用db.session.query(Table.id).filter(Table.id==1).fitst() ==》 select id from tables where id=1;
6.使用index索引进行查询优化
把索引建在经常查询的字段,主键,外键,WHERE子句中的数据列,出现在关键字order by、group by、distinct后面的字段。
索引创建方法:http://www.cnblogs.com/lixiuran/p/6144319.html,注意索引不同
7.在使用order by进行排序时,最好被排序的字段是索引
8.其他方法:http://www.cnblogs.com/petitprince/archive/2010/11/23/1885994.html
大致思路:减少数据存储空间,减少访问数据库次数,减少读取到内存中的数据量。
mysql数据库优化(一)的更多相关文章
- 关于MySQL数据库优化的部分整理
在之前我写过一篇关于这个方面的文章 <[原创]为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)> 这次,主要侧重点讲下两种常用存储引擎. 我们一般从两个方面进行MySQ ...
- 【MySQL】花10分钟阅读下MySQL数据库优化总结
1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 50多条mysql数据库优化建议
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...
- 解开发者之痛:中国移动MySQL数据库优化最佳实践(转)
开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则 ...
- 30多条mysql数据库优化方法【转】
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 百万行mysql数据库优化和10G大文件上传方案
百万行mysql数据库优化和10G大文件上传方案 最近这几天正在忙这个优化的方案,一直没时间耍,忙碌了一段时间终于还是拿下了这个项目?项目中不要每次都把程序上的问题,让mysql数据库来承担,它只是个 ...
- 从运维角度来分析mysql数据库优化的一些关键点【转】
概述 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善. 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分 ...
- 关于mysql数据库优化
关于mysql数据库优化 以我之愚见,数据库的优化在于优化存储和查询速度 目前主要的优化我认为是优化查询速度,查询速度快了,提高了用户的体验 我认为优化主要从两方面进行考虑, 优化数据库对象, 优化s ...
- mysql数据库优化 pt-query-digest使用
mysql数据库优化 pt-query-digest使用 一.pt-query-digest工具简介 pt-query-digest是用于分析 mysql慢查询的一个工具,它可以分析binlog.Ge ...
随机推荐
- deep learning RNN
specialize vi. 专攻;特化;专门从事;详细说明 vt.使专门化;使适应特殊情况;详细说明;列举 generalize across vt.& vi.概括,归纳;推广,普及;使 ...
- Linux系统一些常用命令(持续增加)
这些命令什么的全是从网上找的,防止忘记,留下来备忘 1.linux服务器如何从另一台服务器拷东西:可以用scp命令scp user@remote.machine:/remote/path /local ...
- SpringBoot使用Druid数据库加密链接完整方案
网上的坑 springboot 使用 Druid 数据库加密链接方案,不建议采用网上的一篇文章<springboot 结合 Druid 加密数据库密码遇到的坑!>介绍的方式来进行加密链接实 ...
- 简述at和crontab命令
at 在指定时间执行相关命令 用法:at [option] TIME 常用选项: -l:查询等待运行作业的队列 -d:删除作业,加作业号 -q QUEVE: -c :查看具体作业任务: -f /pat ...
- Javascrip基础
术语解释 Javascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速 ...
- 1-Two Sum @LeetCode
1-Two Sum 题目 思路 题目中得到的信息有: 都是整数,并且可正可负,也可一个值包含多个: 只有一个正确的结果. 方法一: 最直接的思路就是两重循环遍历,时间复杂度是O(n^2),这样肯定不行 ...
- Cygwin,一个提供linux命令行体验的Windows命令行工具
安装 从官网下载,选择合适节点(带edu结尾的优先),安装 使用 未完待续...
- rs232接口定义
- Django学习笔记之URL与视图cookie和session
cookie和session cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...
- 腾讯云cos对象在线显示
问题 前端使用了一张cos的图片,但是无法显示图片,使用的是cdn的加速域名地址. 对比:使用服务器的直接域名是可以显示的. 两者地址直接访问时,一者在线显示,一者直接下载到本地. 原因: 使用默认提 ...