百万负载之SQL数据库的优化

  在考虑一个网站如果承载日百万甚至千万pv时,我们往往本能的往两个方向考虑:静态化及分布式。 固然,对于新浪等门户类型的网站来说,静态化+读写分离及分布式,可以解决大多数的问题。可是我们面临的更多的,可能是大数据+高并发+实时读取,而静态化的固定性便很难解决这个问题。

  比如矮个芝麻最近接到的一个电子商务类的网站,流量大,数据量大,同时要求8206.html">实时更新,因为首页以及内容页往往每时每刻都在变化着。 这个时候我们就不得不查询数据库,也就需要针对数据库作出一些特定的优化。

  优化建议:

  1)表结构的优化

  通过对表结构的优化,往往可以直接的降低数据库的压力。常见的方法比如建索引,拆表,适当冗余扁平化。 索引的作用最为直接,通过B+树轻松实现类似于将一张表划分为几百张表的效果,在进行查询时,往往链表查询需要十万次才能查询到的数据,加了索引之后或许只需要四次就可以解决。

  当然不要过分的增加索引,因为会一定程度上增加数据库的负担。 同时说一个很有意思的问题,如何实现身份证查询系统?我们往往知道,身份证的前几位决定了这个人的所在地,出生年月等可见信息,然后才是几位随机数。而且应该有发现一个问题,那就是只有在户口所在地才能登记身份证,这就是拆表查询。公安系统只需要查询当地数据库下该生日及随机数是否有重复,就可以判断全国是否有重复的身份证了。

  最常用的方法是,将一个月内的活跃用户单独设为一个表,这样每次用户登录,其实只是查询了当月的用户,可以有效的提高查询效率.

  2)sql语句的优化

  sql语句的优化往往要直白很多,就是尽量减少like查询,关联查询等资源消耗比较大,查询量比较大的sql语句,即可,整理了几条如下:

  1.减少不必要的like查询,尽量通过建关键词表实现like查询的效果

  2.减少关联查询,尽量通过左链接右链接的形式实现查询

  3.复杂的查询语句使用储存过程解决.

  4.减少不必要的查询.

  5.避免在索引列上使用IS NULL和IS NOT NULL

  6.尽量避免使用耗费资源的操作:带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎

  7.不要使用SELECT *,尽量指明要显示的列

  8.不要使用INSERT导入大批的数据 请不要这样做,除非那是必须的。使用UTS或者BCP,这样你可以一举而兼得灵活性和速度。

  3)程序段的优化尤为重要

  程序段根据不同的用户需求进行优化,尤为重要.

  最常见的案例就是,当查询列表时,只查询出标题名及简介就可以解决问题.当用户打开该文章后,才会查询该文章的文章内容,评论,发表人信息等关联表的内容.这样可以在很大程度上降低程序的负担.

  尽量通过ajax,在有必要的情况下进行后台查询,而不是在打开页面的时候就进行相关的查询.

  另外,最为重要的一点就是,尽量实现静态化.

  一般对于cms类型的网站来说,静态化可以解决大多数的问题.而后需要查询数据库的无非就是搜索,用户会员中心的相关操作.

  而搜索是可以通过读写分离异步操作的,这样就可以有效的降低服务器的压力.

  当然,还有更多更有效的方法,只是今天突然兴起整理一下,有问题可以和矮个芝麻一起沟通哦~

时间: 2024-11-01 11:29:59

百万负载之SQL数据库的优化的相关文章

Linux高负载下mysql数据库彻底优化

同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法,因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能. 安装好mysql后,配制文件应该在/usr/local/mysql/share/mysql目录中,配制文件有几个,有my-huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的网站和不同配制的服务器环境

SQL数据库优化大总结之百万级数据库优化方案_MsSql

网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. (1) 选择最有效率的表名顺序(只在基于规则的seo/' target='_blank'>优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交

改进数据库SQL语句进行优化的理由

数据|数据库|优化|语句 应用程序的优化通常可分为两个方面:源代码的优化和SQL语句的优化.源代码的优化在时间成本和风险上代价很高:另一方面,源代码的优化对数据库系统性能的提升收效有限. 优化的理由 1)SQL语句是对数据库(数据)进行操作的惟一途径: 2)SQL语句消耗了70%~90%的数据库资源: 3)SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低: 4)SQL语句可以有不同的写法: 5)SQL语句易学,难精通. 优化技术的发展 第一

SQL Server数据库性能优化

设计1个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事.在开发工具.数据库设计.应用程序的结构.查询设计.接口选择等方面有多种选择,这取决于特定的应用需求以及开发队伍的技能.本文以SQL Server为例,从后台数据库的角度讨论应用程序性能优化技巧,并且给出了一些有益的建议. 1 数据库设计 要在良好的SQL Server方案中实现最优的性能,最关键的是要有1个很好的数据库设计方案.在实际工作中,许多SQL Server方案往往是由于数据库设计得不好导致性能很差.所以,要实

SQL Server数据库性能优化技术第1/2页_数据库其它

设计1个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事.在开发工具.数据库设计.应  用程序的结构.查询设计.接口选择等方面有多种选择,这取决于特定的应用需求以及开发队伍的技能.本文以SQL  Server为例,从后台数据库的角度讨论应用程序性能优化技巧,并且给出了一些有益的建议.  1 数据库设计  要在良好的SQL Server方案中实现最优的性能,最关键的是要有1个很好的数据库设计方案.在实际工作中,许多SQL  Server方案往往是由于数据库设计得不好导致性能很差

Oracle数据库中SQL语句的优化技巧_oracle

在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.

MySQL 数据库性能优化之SQL语句及查询优化

优化目标 减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段. 降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了.order by, group by,distinct - 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算).当我们的 IO 优化做到一定

mysql数据库的sql语句常用优化方法

mysql数据库的sql语句常用优化方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where

Oracle数据库性能优化技术

摘要: Oracle数据库是当前应用最广泛的大型数据库之一,而其性优化直接关系到系统的运行效率.本文以数据库性能优化的基本原则为出发点,阐述了在数据库设计阶段如何避免竞争和如何优化数据访问,在数据库运行阶段如何从操作系统和数据库实例级别上调整内存和I/O来达到数据库性能优化的各种技术. 关键词:Oracle数据库:性能优化:内存:I/O 1. 引言 随着网络应用和电子商务的不断发展,各个站点的访问量越来越大,数据库规模也随之不断的扩大,数据库系统的性能问题就越来越突出,因此,如何对数据库进行调优