MYSQL数据库优化MySQL数据库中的查询语句详解
《MYSQL数据库优化MySQL数据库中的查询语句详解》要点: 很多时候基于php+MySQL建立的网站所出现的系统性能瓶颈往往是出在MySQL上,而MySQL中用的最多的语句就是查询语句,因此,针对MySQL数据库查询语句的优化就显得至关重要!本文就此问题做出详细分析如下:MYSQL数据库 1、判断是否向MySQL数据库哀求了不需要的数据,如下列情况:MYSQL数据库 (1)、查询不必要的数据,例如你必要10条数据,但是你选出了100条数据加了limit做限制. 2、mysql是否在扫描额外的记录MYSQL数据库 最简单衡量查询开销的三个指标如下:响应时间、扫描的行数、返回的行数MYSQL数据库 响应时间:服务时间和排队时间.服务时间是指数据库处理这个查询真正花费的时间.排队时间是指服务器因为等待某些资源而没有真正执行的查询.MYSQL数据库 扫描的行数和返回的行数:抱负情况下扫描的行数和返回的行数应该是相同的.MYSQL数据库 一般MYSQL能够使用如下三种方式应用where条件记录,从好到坏依次为:MYSQL数据库 (1)、在索引中使用where条件来过滤不匹配的记录,在存储索引层完成.MYSQL数据库 (2)、使用索引覆盖扫描来返回记录,直接从索引中过滤不必要的记录并返回命中的结果,在mysql服务器层完成,但无需在回表查询记录.MYSQL数据库 (3)、从数据表中返回数据,然后过滤不满足条件的记录,必要先从数据表读出记录然后过滤MYSQL数据库 如果发现查询必要扫描大量的数据但返回少数的行,那么通常可以尝试下面的技巧:MYSQL数据库 (1)、使用索引覆盖扫描,把所有必要的列都放到索引中,这样存储引擎无须返回表获取对应行就可以返回结果了.MYSQL数据库 (2)、改变库表结构,使用单独的汇总表.MYSQL数据库 (3)、重写这个复杂的查询MYSQL数据库 3、重构查询的方式MYSQL数据库 (1)、一个复杂查询还是多个简单查询:MYSQL数据库 Mysql内部每秒能够扫描内存中上百万条数据,相比之下,mysql响应数据给客户端就慢得多,在其他条件都相同的时候,使用尽可能少的查询当然是好的,但有时候将一个大查询分解为多个小查询都是很有需要的.MYSQL数据库 (2)、切分查询:MYSQL数据库 删除旧数据是一个很好的例子,在定期清除大量数据时,如果用一个大的语句一次性完成的话,则可能一次锁住很多数据,占满整个事物日志.耗尽系统资源,阻塞很多小的但很重要的查询.MYSQL数据库 Mysql>deletefrommessageswherecreated<DATE_SUB(NOW(),INTERVAL3MONTH); 改写:MYSQL数据库 Rows_affected=0; Do{ Rows_affected=do_query( “deletefrommessageswherecreated<DATE_SUB(NOW(),INTERVAL3MONTH)”; ) } (3)、分解关联查询:MYSQL数据库 可以让缓存的效率更高,在应用程序中可以方便的缓存单条数据 适合场景:MYSQL数据库 ①当应用程序能够便利的缓存单个查询结果的时候; 欢迎参与《MYSQL数据库优化MySQL数据库中的查询语句详解》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |