当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-01-25 22:43:00  来源:本站整理

<b>通过索引优化含ORDER BY的MySQL语句</b>[MySQL防范]

赞助商链接



  本文“<b>通过索引优化含ORDER BY的MySQL语句</b>[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

关于成立索引的几个原则:

1、公道的成立索引可以加快数据读取效率,不公道的成立索引反而会拖慢数据库的呼应速度.

2、索引越多,更新数据的速度越慢.

3、尽大概在采取MyIsam作为引擎的时刻利用索引(因为MySQL以BTree存储索引),而不是InnoDB.但MyISAM不支持Transcation.

4、当你的程序和数据库构造/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利办理,那就是应当考虑利用诸如memcached这样的分布式缓存系统的时刻了.

5、习惯和逼迫自己用EXPLAIN来解析你SQL语句的性能.

一个很简单犯的错误:

不要在挑选的栏位上安排索引,这是无意义的.应当在条件挑选的语句上公道的安排索引,比方where,order by.

例子:

SELECT id,title,content,cat_id FROM article WHERE cat_id = 1;

上面这个语句,你在id/title/content上安排索引是毫无意义的,对这个语句没有任何优化作用.但是假如你在外键cat_id上安排一个索引,那作用就相当大了.

几个常用ORDER BY语句的MySQL优化:

1、ORDER BY + LIMIT组合的索引优化.假如一个SQL语句形如:

SELECT [column1],[column2],.... FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT];

这个SQL语句优化对比简单,在[sort]这个栏位上成立索引便可.

2、WHERE + ORDER BY + LIMIT组合的索引优化,形如:

SELECT [column1],[column2],.... FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort] LIMIT[offset],[LIMIT];

这个语句,假如你仍旧采取第一个例子中成立索引的办法,固然可以用到索引,但是效率不高.更高效的办法是成立一个结合索引(columnX,sort)

3、WHERE + IN + ORDER BY + LIMIT组合的索引优化,形如:

SELECT [column1],[column2],.... FROM [TABLE] WHERE [columnX] IN ([value1],[value2],...) ORDER BY[sort] LIMIT [offset],[LIMIT];

这个语句假如你采取第二个例子中成立索引的办法,会得不到预期的效果(仅在[sort]上是using index,WHERE那边是using where;using filesort),来由是这里对应columnX的值对应多个.

这个语句怎么优化呢?我暂时没有想到什么好的办法,看到网上有便宜供应的办法,那就是将这个语句用UNION分拆,然后成立第二个例子中的索引:

SELECT [column1],[column2],.... FROM [TABLE] WHERE [columnX]=[value1] ORDER BY [sort] LIMIT[offset],[LIMIT]
UNION
SELECT [column1],[column2],.... FROM [TABLE] WHERE [columnX]=[value2] ORDER BY [sort] LIMIT[offset],[LIMIT]
UNION
……

但经考证,这个办法根本行不通,效率反而更低,测试时关于大部份利用强迫指定利用排序索引效果更好点

4、不要再WHERE和ORDER BY的栏位上利用表达式(函数),比方:

SELECT * FROM [table] ORDER BY YEAR(date) LIMIT 0,30;

5、WHERE+ORDER BY多个栏位+LIMIT,比方

SELECT * FROM [table] WHERE uid=1 ORDER x,y LIMIT 0,10;

关于这个语句,大家大概是加一个这样的索引(x,y,uid).但实际上更好的效果是(uid,x,y).这是由MySQL处理排序的机制造成的.

以上例子你在实际项目中利用的时刻,不要忘掉在增添索引后,用EXPLAIN看看效果.   以上是“<b>通过索引优化含ORDER BY的MySQL语句</b>[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .