今天突然遇到一个问题,一直没有想明白如何解决,所以来问问看看是否有人遇到过同样的事情。sql语句如下:
select ID,HSCode,Info,Origin,Date2 from ukraine2013 where 1=1 and HSCode8 ="39261000" order by Date1 desc Limit 0,20当取值部分包含Info的时候执行这条语句要50秒左右,当把Info去掉0.2秒就执行完毕了。不清楚原因,Info字段的类型是varchar(700)。希望能人帮助解答一下吧。

解决方案 »

  1.   

    explain  select ID,HSCode,Info,Origin,Date2 from ukraine2013 where 1=1 and HSCode8 ="39261000" order by Date1 desc Limit 0,20;
    贴出结果。
    估计是做了file_sort外排序比较耗时吧。
      

  2.   

    和排序应该没有关系吧。当结果集中去掉Info的话,同样的排序执行只要2秒钟左右。
      

  3.   

    你的 info 字段宽度超出了 SQL 标准的 255 字节,虽然也是可以的。
    但是由于是由非标补丁实现的,处理起来绕的弯子比较多,所以就慢了
    可能 mysql6、mysql7 就能解决这个问题了
    其实你改用 text 类型不是更好吗?
      

  4.   

    没理由啊 贴两次执行的explain看看  是否带info的执行计划完全走错   可以强制走索引试试
      

  5.   

    贴出 explain 和 show index几十种原因可以产生这种结果,其中一种就是 在index 中已经包含了 ID,HSCode,Origin,Date2 这些字段