:) 由于 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;
to shuixin13(犬犬(心帆)) 能说一下原理吗?你建一个临时表,但又立刻删除了,这在是时间代价上有好处吗?to bluemeteor(挂月||╭∩╮(︶_︶)╭∩╮) 你说2000w的记录中读末页都没有延迟感,能不能说一个你建索引的经验呢
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(挂月||╭∩╮(︶_︶)╭∩╮) ,说说你的经验。关注...
:) 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 秒级的时间消耗,而通过建立一个临时表, 这个消耗完全是值得的...
insert 的速度难以忍受?
一般来说应该不会.
mysql插入还是很快的.
而这个操作是无法使用该列 a02 上的字段的, 不信你可以使用 EXPLAIN 测试一下
我用过,没有问题的。
a061也要建立索引,因为要排序
limit x,y x越大确实会减低效率,但它是使用位操作来移动的,不会这么明显嘛!
100W了,可以分表了
因为在做一些分页程序中,如果limit x, y中x为很大的时候。查询将会很慢很慢。
shuixin13(犬犬(心帆)) 和lxf_1976(小木) 有没有更好的方法。
由于 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;
你说2000w的记录中读末页都没有延迟感,能不能说一个你建索引的经验呢
就是利用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(挂月||╭∩╮(︶_︶)╭∩╮) ,说说你的经验。关注...
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 秒级的时间消耗,而通过建立一个临时表,
这个消耗完全是值得的...
我试过了,我只取10w,用limit 100000,5,建立临时表比不建立快好几倍在limit x,y当x比较小时,就不值得,不过随着x的增大建立临时表代价变化不很明显,但不建立临时表差不多倍数增长。