|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
2008年1月16号MySQLAB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。SQL语句优化是每一个程序员与DBA必不成少的一门课程,本章就跟从小编一同来切磋一下SQL语句优化应当注重的几个方面吧。
1,把持毗连表中纪录数目。
我们在多表查询的时分,用的最多的生怕就是内毗连(innerjoin)与摆布毗连了(leftjoin与rightjoin)了。但我们改一下SQL的实行按次,以削减毗连表中的纪录数,则能够进步查询的效力.以下语句:
select*fromt1leftjoint2wheret1.id=t2.idandt1.id>800andt2.id<500
假如我们用子查询取代毗连表,以削减毗连表中的纪录数,再来婚配,查询效力是不是能进步了?
sql改写以下:
select*from(select*fromt1wheret1.id>800)aleftjoin(select*fromt2wheret2.id<500)bona.id=b.id.
如许写的语句固然庞大,但的确能够进步查询效力。可是,倡议仅在数据量十分年夜的情形下用该办法,由于数据量小的情形下效果会很不分明,并且影响语句的可读性。
2,把持查询中行与列的数目
2.1削减结查会合的行数。
(1)利用where子句。
能够在select语句中利用where前提选择出我们必要的纪录,再用了局集做进一步的查询,第一点实在就是该办法的详细使用。
(2)利用top关头字。
假如我们断定查询纪录的数目,那末可使用top来限定了局会合的纪录数目,而不是把一切了局查询出来再在前台程序中取断定的纪录数,好比,我们要查询最新的100个消耗纪录,可使用以下select语句:
selecttop100*fromconsumeorderbycreatedatedesc
如查不必top关头字,则select语句以下:
select*fromconsumeorderbycreatedatedesc
显现,前者将年夜年夜进步查询的速率。
(3)得当的利用distinct关头字
当select语句只前往一列数据时,并且了局会合存在良多反复数据的时分,可使用distinct关头字来削减了局会合的纪录数目,以下:
selectdistinctcardonfromconsume
注重:并非一切情形都合适利用distinct关头字的,假如利用不妥,反而会下降查询效力.详细缘故原由请看本站浅谈SQL语句优化的几种办法(二)
2.2削减了局会合的列的数目
应当只管制止在select语句利用*来暗示要查询的列,因这会前往表中一切的列。并且假如在视图中利用*,那末在表布局变更时,视图的列还会错位。我们应当明白列出要查询的列,制止了局会合不呈现大批不必要的列。出格是text,varchar(max)等年夜数据量的列,能不必到,就必定不在select的列中呈现。
以下语句:
select*fromconsume
应当改成:
selectid,name,model,unitfromconsume
注重,出格是在多表的团结查询中,该办法更现主要,利用*不但会增添了局集的数据量,另有大概会形成了局会合有反复列的的毛病,以是出格不保举在select中利用*号。因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。 |
|