浅谈数据库优化方面的经验
浅谈数据库优化方面的经验
任何系统、网站几乎都离不开数据库,数据库好比人大脑的记忆系统,没有了数据库就没有了记忆系统。而数据库优化则相当于在同等智力的情况下,利用一种高效率地记忆方法进行更快更优的记忆。那么数据库优化具体有哪些呢?这里我罗列出7种经常用到的方法。
1.多用 LIMIT
很多情况下,我们知道查询表只会有一条结果。在这种情况下,我们不妨加上LIMIT 1,这样可以增加性能。MySQL数据库引擎会在找到一条数据后停止搜索,而不是占据cpu继续往下查直到查询表中的最后一条数据为止。
低效率:
String sql="SELECT * FROM tableName WHERE country='CHAIN' ";
高效率:
String sql="SELECT * FROM tableName WHERE country='CHAIN' LIMIT 1" ;
2.尽量不用ORDER BY RAND()
要从tablename表中随机提取一条记录,大部分的人写法是:
SELECT * FROM tablename ORDER BY RAND() LIMIT 1。
但是官方是不提倡这种用法的,官方手册提及到ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。试着测试一下你就会知道效率非常低。一个20万余条的库,查询5条数据,居然要10秒以上。10秒的等待足以使一个用户失去所有耐心,这也是优化的必要性。
当你想使用随机取一条记录的时候,个人觉得用max(id) * rand()就可以了,花费的时间应该在0.1秒以内。
3. EXPLAIN你的SELECT查询
EXPLAIN关键字的作用是让你可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构。从根本处找出可以优化的地方,EXPLAIN的查询结果也会告诉你,你的索引主键被如何利用的,你的数据表是如何被搜索和排序的,通过对这些信息的查看,你可以对自己的查询语句做相应的调整
explain select * from statuses_status where id=11;
4.避免 SELECT *
我们需要哪些属性就取哪些,避免全盘接收。比如我们比如我们只需要查询id和name两个属性,那么我们可以使用
SELECT id,name FROM TEACHER;
尽量避免使用select * ,虽然有时效果一样,但效率不一样。
5. 为搜索字段建索引
索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧。
普通索引 添加INDEX
ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
主键索引 添加PRIMARY KEY
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
唯一索引 添加UNIQUE
ALTER TABLE `table_name` ADD UNIQUE ( `column` )
全文索引 添加FULLTEXTmysql> alter table table_name add fulltext (`column` )
6.利用查询缓存来优化查询
当MySQL开启了缓存模式(query_cache_type=1)后,mysql会把查询语句和查询结果保存在一张hash表中,下一次用同样的sql语句查询时,mysql会先从这张hash表中获取数据,如果缓存没有命中,则解析sql语句,查询数据库。 当缓存的数据达到最大值(query_cache_size) 后,mysql会把老的数据删除掉,重新写入新的数据。
查看缓存的语句:
show variables like '%query_cache%'
7.尽量不使用NOT IN和like语句操作
NOT IN和like“%aaa%”操作都不会使用索引,将进行全表扫描。可取的方法是NOT IN可以NOT EXISTS代替
(注意的是like “aaa%”是可以使用索引的)
8.UNION-ALL代替UNION
如果业务上没有特殊说明,可以考虑用UNION-ALL 替换UNION,因为UNION-ALL不会过滤重复数据,所执行效率要快于UNION,并且UNION可以自动排序,而UNION-ALL不会,这些细节往往都影响了数据库的性能。
编写人:梦想的边缘
浅谈数据库优化方面的经验相关推荐
- 浅谈数据库优化方案--表和SQL
1.数据类型的选择 1.字段最好设置为非空.若字段为char(8),即便是NULL也会现有8个字符的空间. 2.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能, ...
- 浅谈数据库发展史和 OceanBase 的诞生
浅谈数据库发展史和 OceanBase 的诞生 原创 杨传辉 OceanBase 昨天 本文作者:杨传辉(花名:日照)蚂蚁集团资深总监.OceanBase 研发总经理,全面负责 OceanBase 研 ...
- 并发执行变成串行_大神浅谈数据库并发控制 锁和 MVCC
在学习几年编程之后,你会发现所有的问题都没有简单.快捷的解决方案,很多问题都需要权衡和妥协,而本文介绍的就是数据库在并发性能和可串行化之间做的权衡和妥协 - 并发控制机制.  如果数据库中的所有事务 ...
- 浅谈数据库设计技巧(上)
浅谈数据库设计技巧(上) 说到数据库,我认为不能不先谈数据结构.1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法.尽管现在的程序开发已由面向过程为主逐步过渡 ...
- 浅谈凸优化中的共轭函数
浅谈凸优化中的共轭函数 函数ff的共轭定义: f∗(y)=sup(yTx−f(x))f^*(y) = \sup (y^Tx - f(x)), x∈domf{x\in {\bf dom} f} 可见,共 ...
- 在职研究生计算机专业经验分享,育龙在职研究生网浅谈计算机专业PHD申请经验...
育龙在职研究生网浅谈计算机专业PHD申请经验 Match.是否match应该是最重要的.大家可以换位思考一下,如果两个学生背景相差不大,你肯定会选择一个可以很快就能替你干活的学生.我自己的申请结果也很 ...
- mysql系统研究现状_浅谈数据库的现状和发展 毕业论文.doc
浅谈数据库的现状和发展 摘 要 学生学籍管理系统是一个教育单位不可缺少的部分,它的对于学校管理至关重要学生学籍管理系统能够为用户提供信息和快捷的查询手段.使用传统人工方式管理文件学籍,这种管理方式存在 ...
- 浅谈数据库并发控制 - 锁和 MVCC
文章写得不错,原文地址见 http://draveness.me/database-concurrency-control.html 在学习几年编程之后,你会发现所有的问题都没有简单.快捷的解决方案, ...
- 浅谈性能优化之图片压缩、加载和格式选择
原文链接:浅谈性能优化之图片压缩.加载和格式选择 在认识图片优化前,我们先了解下 [二进制位数]与[色彩呈现]的关系. 二进制位数与色彩 在计算机中,一般用二进制数来表示像素.在不同的图片格式中,像素 ...
最新文章
- post提交返回json格式
- java产生全局唯一的int类型_全局唯一ID设计
- 【运维人员应该掌握哪些常用技术】
- 用 HTTPS 就安全了?HTTPS 会被抓包吗?
- CS229 1 .线性回归与特征归一化(feature scaling)
- 信息学奥赛一本通 1195:判断整除 | OpenJudge 2.6 3531:判断整除
- win10 中午未使用 内存占用增高_清理磁盘空间【win10篇】
- Windows server 2008 R2搭建主域控制器 + 辅域控制器
- app闪退后重启_安卓APP崩溃(crash)后重新启动,捕获全局异常重启APP
- java timer demo_java中任务调度java.util.Timer,ScheduledExecutor,Quartz的机制说明和demo代码实例分享...
- 计算机专业表情包图片,各个专业表情包盘点 | 你的专业也有自己专属表情包吗?...
- matlab DFA算法计算Hurst指数
- 1114 计算营业额
- 50. 文件上传篇——文件上传漏洞原理
- CSDN_MySQL入门技能树学习整理知识点
- ueditor编辑器上传图片的显示问题
- 移动硬盘删除的文件如何恢复
- 【光通信光互联电信模块详解】
- 学习诸如 Oculus Rift 等虚拟现实设备开发需要掌握哪些知识和技术?
- No servers available for service: xxxx
热门文章
- EC20 TCP/IP指令例程
- 深度解读 | 等保2.0之移动互联安全扩展要求解读
- 博途PLC 1200/1500PLC ModbusTcp通信之状态机编程
- 智慧化工园区管理平台综合解决方案
- PADS 9.5如何给矩形板框加上倒角
- android 无线投影方案,无线传屏方案
- windows2016 达梦8数据库实例初始化和卸载
- 目标跟踪“Staple: Complementary Learners for Real-Time Tracking”
- 【热门主题】魔兽世界游戏主题
- 计算机系怎样挑笔记本,电脑怎么选择性截图