show processlist;
发现有200多个队列,
select cardnum from table where xxxid = 31 order by abc_time desc

这样的一个排序,把服务器堆住了。怎么回事? abc_time已经加了索引。

 
 
 
评论 (2) • 分享 • 链接 • 2011-11-28 

 
  • 0
    xxxid有索引吗? – 何远伦 2011-11-28
  • 0
    有索引啊~~~ – 尚兴跃 2011-11-30
 
3个答案

 

mysql对于排序,使用了两个变量来控制sort_buffer_size和 max_length_for_sort_data。可以通过增大这两个属性值加快ORDER BY或GROUP BY操作。

其中,max_length_for_sort_data更用于优化filesort算法:
mysql的filesort有两个方法,mysql 4.1之前是使用方法A,之后版本会使用改进的算法B,但使用方法B的前提是列长度的值小于max_length_for_sort_data

filesort的两个方法介绍以及优化方式:http://forge.mysql.com/wiki/MySQL_Internals_Algorithms

How MySQL Does Sorting (filesort)
Using the modified filesort algorithm, the tuples are longer than the pairs used in the original method, and fewer of them fit in the sort buffer (the size of which is given by sort_buffer_size). As a result, it is possible for the extra I/O to make the modified approach slower, not faster. To avoid a slowdown, the optimization is used only if the total size of the extra columns in the sort tuple does not exceed the value of the max_length_for_sort_data system variable. (A symptom of setting the value of this variable too high is that you should see high disk activity and low CPU activity.)

胡加杰

编辑于 2011-11-28
 
评论 (1) • 链接 • 2011-11-28
  • 0
    我增加了read_buffer_size = X M
    read_rnd_buffer_size = X M
    排序的内容太多,也影响到了速度。
    这两个参数,也起到了不错的效果。 – 尚兴跃 2011-11-30
 
 

同意@胡加杰的从MySQL配置上去优化,我还想说一点:
建立索引在匹配条件的字段建立会更好。比如你的这个SQL,应该在“xxxid”建立索引,而不应该在“abc_time”建立索引。因为索引(B+树、Hash、位图)都是为了加快查找速度,“desc”是排序用的,对它建立索引没有用处。所以去掉abc_time字段索引,建立xxxid字段索引。

评论 (0) • 链接 • 2011-11-29
 
 

首先你是用了xxxid作为条件去查询数据,xxxid字段最好要有索引,
其次你可以用explain select cardnum from table where xxxid = 31 order by abc_time desc 看看这条语句遍历的数据行数有多少,优化一下语句,
另外最好加一个limit,限制一下每次取数据的行数,
最后要看看这个队列是不是有大量的写入更新操作,可以做一下读写分离,因为写入更新操作太多也是会堵塞查询的。

何远伦

编辑于 2011-11-29
 
评论 (0) • 链接 • 2011-11-29
 
 
 

不是您所需,查看更多相关问题与答案

MYSQL Sorting result 把队列堆满了,该怎么办?的更多相关文章

  1. java 线程池线程忙碌且阻塞队列也满了时给一个拒接的详细报告

    线程池线程忙碌且阻塞队列也满了时给一个拒接的详细报告.下面是一个自定义的终止策略类,继承了ThreadPoolExecutor.AbortPolicy类并覆盖了rejectedExecution方法把 ...

  2. 循环队列+堆优化dijkstra最短路 BZOJ 4152: [AMPPZ2014]The Captain

    循环队列基础知识 1.循环队列需要几个参数来确定 循环队列需要2个参数,front和rear 2.循环队列各个参数的含义 (1)队列初始化时,front和rear值都为零: (2)当队列不为空时,fr ...

  3. POJ-3017 Cut the Sequence DP+单调队列+堆

    题目链接:http://poj.org/problem?id=3017 这题的DP方程是容易想到的,f[i]=Min{ f[j]+Max(num[j+1],num[j+2],......,num[i] ...

  4. 【POJ 2823】Sliding Window(单调队列/堆)

    BUPT2017 wintertraining(16) #5 D POJ - 2823 题意 给定n,k,求滑窗[i,i+k-1]在(1<=i<=n)的最大值最小值. 题解 单调队列或堆. ...

  5. POJ 3017 DP + 单调队列 + 堆

    题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...

  6. bzoj2276: [Poi2011]Temperature(单调队列/堆)

    这题有两种写法,而且是完全(几乎?)不一样的写法...并不是换了个方法来维护而已 单调队列O(N):用一个队列维护a[]的单调递减,对于每个i满足a[队头]<=b[i],然后就可以算出以每一位为 ...

  7. 20140506 visio 画布大小 栈实现队列 堆空闲内存地址链表 堆最大可分配的内存 可用内存链表

    1.调整visio的画布大小 按住Ctrl鼠标移动到画布边缘即可 2.两个栈实现一个队列 一个栈用于入队,一个用于出队 #include<iostream> #include<sta ...

  8. 洛谷P1725 琪露诺 (单调队列/堆优化DP)

    显然的DP题..... 对于位置i,它由i-r~i-l的位置转移过来,容易得到方程 dp[i]=dp[i]+max(dp[i−r],...,dp[i−l]). 第一种:n2的暴力,只能拿部分分. 1 ...

  9. hdu 6215 -- Brute Force Sorting(双向链表+队列)

    题目链接 Problem Description Beerus needs to sort an array of N integers. Algorithms are not Beerus's st ...

随机推荐

  1. 题解报告:hdu 1171 Big Event in HDU(多重背包)

    Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...

  2. 影响TCP连接寿命的因素

    NAT超时 大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT 表中的对应项,造成链路中断.NAT超时是影响TCP连接寿命的一个重要因素(尤其是国内),所以客户端自动测算NAT超时 ...

  3. Laravel5中防止XSS跨站攻击的方法

    本文实例讲述了Laravel5中防止XSS跨站攻击的方法.分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HT ...

  4. (Android MVVM)使用Data Binding Library(1)

    Data Binding Library 用官方提供的Data Binding Library,可以最大限度的减少findViewById(),setOnClickListener()之类的胶水代码, ...

  5. iOS Programming Dynamic Type 2

    iOS Programming Dynamic Type  2       You will need to update two parts of this view controller for ...

  6. Javascript IE 内存释放

    一个内存释放的实例 <SCRIPT LANGUAGE="JavaScript"><!--strTest = "1";for ( var i = ...

  7. python中统计计数的几种方法和Counter的介绍

    使用字典dict()alist=['a','b','a','c','b','b',1,3]count_dict = dict()for i in alist:count_dict[i]=count_d ...

  8. Java SE、Java EE、Java ME 三者区别

    现在一个个来分析 1. Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 ...

  9. CE工具里自带的学习工具--第四关

    图解:

  10. echo追加字符串到文件末尾

    1.覆盖    echo  "string" >  filename 2.追加   echo "string"  >>  filename