关闭

浅谈数据库优化方面的经验

标签: mysql优化
1911人阅读 评论(0) 收藏 举报
分类:

浅谈数据库优化方面的经验

任何系统、网站几乎都离不开数据库,数据库好比人大脑的记忆系统,没有了数据库就没有了记忆系统。而数据库优化则相当于在同等智力的情况下,利用一种高效率地记忆方法进行更快更优的记忆。那么数据库优化具体有哪些呢?这里我罗列出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` )
全文索引   添加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不会,这些细节往往都影响了数据库的性能。



编写人:梦想的边缘

0
0
查看评论

一些数据库优化方面的经验

用PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存 “inert into user values(1,1,1)”-à二进制 “i...
  • lixiaoming000
  • lixiaoming000
  • 2013-10-29 15:29
  • 1176

SQL数据库优化经验

一、人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS)中表现得尤为明显。笔者在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条...
  • emailqjc
  • emailqjc
  • 2009-08-05 11:34
  • 6050

SQL数据库优化方面的经验

1、用PreparedStatement一般来说比用Statement性能高,一个sql发给服务器去执行,涉及步骤:语法检查,语义分析,编译,缓存。 2、有外键约束会影响插入和删除性能,如果程序能够保证数据完整性,在设计数据库时就去掉外键。 3、表中允许适当冗余。 4、sql语句全部大写,特别是列名...
  • daodaipsrensheng
  • daodaipsrensheng
  • 2016-08-29 10:42
  • 5418

数据库优化方面的经验

1.PreparedStatement比Statement的效率高。(预编译、防止Sql注入) 2.有外键约束会影响插入和删除的效率,如果能保证数据的完整性,则应尽量少的使用外键约束。 3.sql语句全部大写,特别是表名和列名,特别是Sql功能的缓存功能,更加需要统一大小写。 4.索引对查询效...
  • LXiZh11
  • LXiZh11
  • 2013-08-24 11:01
  • 574

数据库-面试题-MySQL数据库的优化方法

1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库...
  • flybirddizi
  • flybirddizi
  • 2017-08-22 17:56
  • 270

浅谈数据库优化经验

数据库优化的目标无非是避免磁盘I/O瓶颈、减少CPU利用率和减少资源竞争。 1、 在业务密集的SQL当中尽量不采用IN操作符 2、  不使用not in 因为它不能应用表的索引。用not exists 或(外连接+判断为空)代替 3、  不使用0改为a>0 or a ...
  • dsp_daiyujie
  • dsp_daiyujie
  • 2012-09-20 21:16
  • 317

浅谈SQL语句优化经验

(1) 选择最有效率的表名顺序(只在基于规则的seo/' target='_blank'>优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包...
  • qq_22929803
  • qq_22929803
  • 2016-05-07 13:47
  • 545

招聘人经验浅谈

招聘人经验浅谈   通过最近一阶段的面试、人员管理,总结了以下7点经验(仅个人见解),希望对招聘者有一定的作用。 一、         新员工入职前做好背景调查。入职调查有几点要注意: 1、如果背景属实...
  • yangguoqi
  • yangguoqi
  • 2012-02-19 12:34
  • 899

MySql数据库优化可以从哪几个方面进行?

数据库优化可以从哪几个方面进行?老司机来带你!
  • q602075961
  • q602075961
  • 2017-05-01 23:44
  • 1441

提高mysql千万级大数据SQL查询优化30条经验

转自: http://www.jincon.com/archives/120/ 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而...
  • py_xin
  • py_xin
  • 2016-06-06 09:01
  • 2805
    个人资料
    • 访问:77209次
    • 积分:850
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:1篇
    • 译文:0篇
    • 评论:21条
    文章分类