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. Fighting

    class Demo { public static void main(String[] args) { int a=3,b=8; int c=(a>b)?a++:b++; System.ou ...

  2. Visual studio docker build no such file or directory

    在我构建新的镜像的时候, 发生 了  no such file or directory 的错误.  这个错误找了半天, 没头绪,项目结构是这样的: WebApplication1 建立在根目录下,是 ...

  3. 201 Bitwise AND of Numbers Range 数字范围按位与

    给定范围 [m,n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含m, n两端点).例如,给定范围 [5,7],您应该返回 4. 详见 ...

  4. GIT配置及用法

    ssh配置 TortoiseGit配置 用法: 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓 ...

  5. flex弹性布局操练1

    实现弹性布局之前常用浮动,相对定位和绝对定位等,但是现在好了,随着flex的兴起,方便了很多,而且也符合未来响应式布局的方向. 理论的东西可参考css3手册,这里专注实操. 一:单个元素 <di ...

  6. MATLAB 中的randn函数

    matlab函数 randn:产生正态分布的随机数或矩阵的函数 randn:产生均值为0,方差σ^2 = 1,标准差σ = 1的正态分布的随机数或矩阵的函数. 用法: Y = randn(n):返回一 ...

  7. connection timeout 和command timeout

    每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的.以ADO.NET为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种: ''' 当从连接池获取一个连接时,碰到超 ...

  8. 对称加密DES加密

    DES加密: des是对称加密,加密和解密需要相同的秘钥,它的密码最长56位,必须是8的倍数,秘钥越长,越安全. package com.trm.util.encrypt; import java.s ...

  9. JavaSE-11 接口

    学习要点 接口的定义 接口作为约定 接口作为能力 接口 为什么使用接口 需求描述 要求实现防盗门的功能(防盗门:带锁的门). 需求分析 门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能. 将门和 ...

  10. pymouse pykeyboard

    import time from pymouse import PyMouse from pykeyboard import PyKeyboard import re import win32clip ...