浅谈数据库优化方面的经验
来源:互联网 发布:重庆大学网络教育官网 编辑:程序博客网 时间:2024/06/08 04:22
浅谈数据库优化方面的经验
任何系统、网站几乎都离不开数据库,数据库好比人大脑的记忆系统,没有了数据库就没有了记忆系统。而数据库优化则相当于在同等智力的情况下,利用一种高效率地记忆方法进行更快更优的记忆。那么数据库优化具体有哪些呢?这里我罗列出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. 为搜索字段建索引
索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧。
普通索引 添加INDEXALTER TABLE `table_name` ADD INDEX index_name ( `column` )
主键索引 添加PRIMARY KEYALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
唯一索引 添加UNIQUEALTER TABLE `table_name` ADD UNIQUE ( `column` )
全文索引 添加FULLTEXT mysql> 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
- Mysql数据库的优化技术方面
- 浅谈Oralce数据库的优化
- 学习笔记1:数据库优化(优化的关联方面)
- 数据库设计经验浅谈
- 数据库开发经验浅谈
- sybase性能优化经验浅谈
- Dockerfile之优化经验浅谈
- 浅谈SQL语句优化经验
- 浅谈SQL语句优化经验
- 海量数据网站的数据库SQL方面的优化
- 数据库开发的性能优化经验
- 互补滤波姿态估计程序
- LA7037-The Problem Needs 3D Arrays(最大稠密子图)
- [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)
- Nearest Common Ancestors
- MongoDB的使用
- 浅谈数据库优化方面的经验
- lua学习(1)_____配置lua运行环境
- oracle 服务启动TNSLSNR.exe占用8080端口的问题
- codeforces-368 B. Bakery
- 英文求职信 规范
- Android四大组件之:ContentProvider
- 【Python】Python_learning7:Python中斐波那契数列三种写法
- PHP基本语法--php基础最详细教程
- 使用PHP发送邮件的两种方法