`
cobo85
  • 浏览: 115370 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MySQL性能优化浅谈

阅读更多

     数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),都需要注意数据操作的性能,下面简要总结下自己工作以来对sql优化的一点心的(请先根据实际情况给必要字段增加索引)。

    1、查询时尽量减少笛卡尔积的大小,特别是在表中数据超百万的大数据情况下。有关系的表之间直接进行join操作,有时候这样虽然是简便但并不是所有情况下都合适的。可以通过子查询等方式,把单表的数据先过出去大部分,然后在进行join的操作。前些时间优化报表,某报表在优化前需要20分钟才能查的出来,经过过滤优化之后8秒就可以搞定。

    2、为查询增加缓存,特别是对一些不经常改动的数据。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,以后的同样查询就会直接用缓存而不再次查询数据库,这样就要求在sql在解释时候最好存在相同的以往已经执行过的sql语句。这个一般对时间作为查询条件的多注意下就可以了。

    3、多使用使用EXPLAIN关键字,分析查询语句或是表结构的性能瓶颈,这也是最基本的。推荐一个toad工具,在返回的结果集旁边可以增加查看EXPLAIN的结果。

    4、如果查询结果只是作为一种存在不存在的判断,或者在查询前可以断定最多有几条,那么加个limit 1/max 会更好些。

    5、不要随便的select * ,即便是用hibernate等orm框架,如果你只需要一个大对象的其中一两个字段,那么最好只取所需的。

    6、建表的时候最好让字段not null ,字符型可用"",数字型可用0来代替,当然特出需要还是要用的。另外如果可以决定字段的长度,那么最好建表的时候就决定,char能搞定的就不要用varchar了。

    7、根据实际情况选着合适的存储引擎,如果没有事务之类的,只是一些历史数据查询,那么选择MyISAM应该是最合适的,利用etl构建的报表系统。

分享到:
评论

相关推荐

    浅谈MySQL数据库性能优化

    本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存,插入缓存,以及连接参数等方式来对MySQL数据库进行优化。  缓存参数  这里先引用一句话,从内存中读取一个数据的...

    浅谈MySQL大表优化方案

    MySQL数据库本身高度灵活,造成性能不足,严重依赖开发人员的表设计能力以及索引优化能力,在这里给几点优化建议 时间类型转化为时间戳格式,用int类型储存,建索引增加查询效率 建议字段定义not null,null值很难...

    浅谈MySQL索引优化分析

    通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义。助你了解索引,分析索引,使用索引,从而写出更高性能的sql语句。还在等啥子?撸起袖子...

    浅谈MySQL分页Limit的性能问题

    MySQL的分页查询通常通过limit来实现。limit接收1或2个整数型参数,如果是2个参数,第一个是指定第一个返回记录行的偏移量,第二个是返回记录行的最大数目。初始记录行的偏移量是0。为了与PostgreSQL兼容,limit也...

    浅谈InnoDB隔离模式的使用对MySQL性能造成的影响

    在这篇文章里我将讨论一个相关的主题 – InnoDB 事务隔离模式,还有它们与MVCC(多版本并发控制)的关系,以及它们是如何影响MySQL性能的。 MySQL手册提供了一个关于MySQL支持的事务隔离模式的恰当描述 – 在这里我...

    运维角度浅谈MySQL数据库优化(李振良)

    这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1、数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构...

    浅谈MySQL和MariaDB区别(mariadb和mysql的性能比较)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 ...

    浅谈MySQL排序原理与案例分析

    前言 排序是数据库中的一个基本功能,...为了优化SQL语句的排序性能,最好的情况是避免排序,合理利用索引是一个不错的方法。因为索引本身也是有序的,如果在需要排序的字段上面建立了合适的索引,那么就可以跳过排

    浅谈MySQL和Lucene索引的对比分析

    以前写过一篇《Solr与MySQL查询性能对比》,只是简单的对比了下查询性能,对于内部原理却没有解释,本文简单分析下两者的索引区别。 MySQL索引实现 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的...

    浅谈MySQL 统计行数的 count

    在这篇文章里,会先介绍 count() 实现的原理及原因,然后是 count 不同用法的性能分析,最后给出需要频繁改变并需要统计表行数的解决方案。 Count() 的实现 InnoDB 和 MyISAM 是 MySQL 常用的数据引擎,由于两者实现...

    浅谈mysql explain中key_len的计算方法

    mysql的explain命令可以分析sql的性能,其中有一项是key_len(索引的长度)的统计。本文将分析mysql explain中key_len的计算方法。 1、创建测试表及数据 CREATE TABLE `member` ( `id` int(10) unsigned NOT NULL ...

    浅谈选择mysql存储引擎的标准

    建议使用MySQL5.5及以后的版本,因为这个版本及以后的版本的InnoDB引擎性能更好。 MySQL4.1以后的版本中,InnoDB可以将每个表的数据和索引存放在单独的文件中。这样在复制备份崩溃恢复等操作中有明显优势。可以通过...

    浅谈MySQL临时表与派生表

    对于自动创建的临时表,由于内存临时表的性能更为优越,mysql总是首先使用内存临时表,而当内存临时表变得太大时,达到某个阈值的时候,内存临时表就转存为外存临时表。也就是说,外存临时表是内存临时表在存储空间...

    Postgresql中国用户大会 2016(PG大象会)所有PPT汇总.zip

    CK Tan-VITESSE DATA-DeepGreen DB- 性能优化、开发方向.pdf 楼方鑫-平民软件-Spark_over_OneProxy_Postgresql.pdf Mason Sharp-华为-Scaling with PostgreSQL 9.6 and Postgres-XL.pdf 陆公瑜-Pivotal- ...

    淘宝技术嘉年华峰会上的7月10日全部PPT下载

    【14:00 - 15:40】 7月9日-系统稳定性及性能优化 蒋江伟/小邪(淘宝网) 【15:50 - 17:30】 7月9日-SNS核心平台分享 俞江/本因(淘宝网) 【15:50 - 17:30】 7月9日-都是海量惹得祸 之 大家来聊Namenode瓶颈解决方案...

    asp.net知识库

    也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (二) 自动...

Global site tag (gtag.js) - Google Analytics