各位mysql牛兄,怎么不说说呢?

解决方案 »

  1.   

    limit 本身会造成全表扫描,也就是说limit x, y 实际上会搜索出x+y条记录。并不像想象的优化成直接读取x+1,x+2,x+3...x+10记录.在MySQL Optimisation一章中并没有直接对limit x, y有什么优化方案。我看只有通过变通的方式来吧。比如说:分页程序,可以想办法取得每页最后一条记录的id号.不过这种方法对于有些情况还是增加不了性能。所以,等高手来发表发表意见了。关注中至于建立、删除index,那个事情本身都会花很多时间的。
      

  2.   

    在有index的表中insert 当然会慢一点了。只是觉得那速度有点难以忍受。希望大虾们有什么好的办法指点一下。
      

  3.   

    怎么问题又跑到insert上面去了?
      

  4.   

    ^_^.无语.
    insert 的速度难以忍受?
    一般来说应该不会.
    mysql插入还是很快的.
      

  5.   

    呵呵,由于你使用的是 <> 操作符,
    而这个操作是无法使用该列 a02 上的字段的, 不信你可以使用 EXPLAIN 测试一下
      

  6.   

    to shuixin13(犬犬(心帆)) :
    我用过,没有问题的。
      

  7.   

    犬犬的意思是指<>操作符将导致无法使用a02字段上的索引
      

  8.   

    <>a02是得a02索引无效
    a061也要建立索引,因为要排序
    limit x,y x越大确实会减低效率,但它是使用位操作来移动的,不会这么明显嘛!
    100W了,可以分表了
      

  9.   

    我关心的是limit 的问题。
    因为在做一些分页程序中,如果limit x, y中x为很大的时候。查询将会很慢很慢。
    shuixin13(犬犬(心帆)) 和lxf_1976(小木) 有没有更好的方法。
      

  10.   

    [因为在做一些分页程序中,如果limit x, y中x为很大的时候。查询将会很慢很慢。]你的库表索引问题或者SQL编写问题  我这里2千万的数据 直接点击尾页 没有延迟感
      

  11.   

    :)
    由于 MySQL 中没有聚集索引这个概念,
    所以这样的问题也很难处理给大家一些小小的经验
    假设现有表 `reg_info` ,该表上有一个主键 `user_id`
    SELECT user_id FROM `reg_info` ORDER BY user_id LIMIT 480000, 5
    与 
    SELECT user_id, user_name FROM `reg_info` ORDER BY user_id LIMIT 480000, 5
    这两个语句在速度上相差有多大呢??
    :)
    呵呵,
    我不说了,
    在这种情况下,
    有两个办法可以解决A:  
    SELECT user_id, user_name FROM `reg_info` ORDER BY user_id DESC LIMIT 0, 5;这个方法有很多的限止,B: 用下面的语句来实现
    CREATE TEMPORARY TABLE temp_table (PRIMARY KEY(ID)) SELECT user_id ID from `reg_info` LIMIT 480000, 5;
    SELECT tB.* FROM temp_table tA LEFT JOIN `reg_info` tB ON tA.ID = tB.user_id;
    DROP TABLE temp_table;
      

  12.   

    to  shuixin13(犬犬(心帆)) 能说一下原理吗?你建一个临时表,但又立刻删除了,这在是时间代价上有好处吗?to bluemeteor(挂月||╭∩╮(︶_︶)╭∩╮) 
    你说2000w的记录中读末页都没有延迟感,能不能说一个你建索引的经验呢
      

  13.   

    shuixin13(犬犬(心帆)) 的意思我基本知道了。
    就是利用SELECT ID FROM tA LIMIT X, Y(1)与 SELECT ID Field1, Field2 FROM tA LIMIT X, Y(2)(ID为primary key)速度上的差异来进行。不过我那天测试的时候也是这样一个表,有140万条记录吧,可是查询1要花2.xx秒,查询2要花7.xx秒.当时x为1400000, y为5.我再试试看。bluemeteor(挂月||╭∩╮(︶_︶)╭∩╮) ,说说你的经验。关注...
      

  14.   

    :)
    SELECT user_id FROM `reg_info` ORDER BY user_id LIMIT 480000, 5
    与 
    SELECT user_id, user_name FROM `reg_info` ORDER BY user_id LIMIT 480000, 5这两个语句在执行上有很大的差别,因为查询1 只是从索引页中取出数据,
    查询2 需要从索引页中取出数据,然后再到数据文件中定位到记录再取出其它的字段信息,
    通常查询1 可以在 0.x  秒级地取出数据,
    而查询2 可能是 x 秒级的时间消耗,而通过建立一个临时表,
    这个消耗完全是值得的...
      

  15.   

    谢谢 shuixin13(犬犬(心帆)) 
    我试过了,我只取10w,用limit 100000,5,建立临时表比不建立快好几倍在limit x,y当x比较小时,就不值得,不过随着x的增大建立临时表代价变化不很明显,但不建立临时表差不多倍数增长。