沧蓝
发表于 2008-12-12 10:29:17
如果去掉 ORDER BY,性能能够提高多少?
另外,刚发布的MySQL 5.1对index的算法优化过了,你可以测试一下看看~
沧蓝
发表于 2008-12-12 10:38:02
另外,5.1新增了table partition的功能,对高数据量(比如楼主的)的数据库应当能有性能上的提高~
pp18180058
发表于 2008-12-13 09:41:19
去掉order by 是0.29s
5.1没试过, 我下载一个试试~~~
pp18180058
发表于 2008-12-13 18:43:31
100 rows fetched in 0,0048s (0.3416s)
0.34s,只快了一点点
pp18180058
发表于 2008-12-13 19:04:34
什么原因呢?
我用SELECT ID,title,pubdate,senddate,categoryID from pp_law where title like '%北京%' order by fbrq desc limit 0,10,才用0,009s
搜索都比 limit 230000,10快30倍
lovewqww
发表于 2008-12-18 11:55:25
1、offset比较小的时候。
select * from yanxue8_visit limit 10,10
多次运行,时间保持在0.0004-0.0005之间
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10,1
) limit 10
多次运行,时间保持在0.0005-0.0006之间,主要是0.0006
结论:偏移offset较小的时候,直接使用limit较优。这个显然是子查询的原因。
2、offset大的时候。
select * from yanxue8_visit limit 10000,10
多次运行,时间保持在0.0187左右
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10
多次运行,时间保持在0.0061左右,只有前者的1/3。可以预计offset越大,后者越优。
以后要注意改正自己的limit语句,优化一下mysql了
pp18180058
发表于 2008-12-24 09:55:20
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 230000,1
) limit 100
一样的呀,也是0.3x 秒~~
visvoy
发表于 2009-1-29 12:31:54
分 表
liugehao
发表于 2009-2-14 12:40:54
9# tboqi
你不明白那就对了,没见过这么建索引的。
liugehao
发表于 2009-2-14 12:49:42
本帖最后由 liugehao 于 2009-2-14 13:01 编辑
select ID,title from pp_news order by pubdate desc limit 2370000,30
这条语句来说,要建立pubdate的索引
因为你没有查询条件,其它的索引根本用不到。
select ID,(select title from pp_news b where b.ID=a.ID) as title from pp_news a order by pubdate desc,ID desc limit 230000,100
这个用了个子查询,比那个快的原因肯定是你没做pubdate的索引,而这个用到了一个ID的主键所致。做了PUBDATE的索引后这个应该比第一个要慢的
我是 select ID,title,pubdate,senddate,categoryID from pp_news order by pubdate desc,ID desc limit 230000,100
我建了一个索引 ID,title,pubdate,senddate,categoryID
用不到的查询和排序条件一定不要建立索引,这样你的插入效率会受到影响,而不会提高查询效率。
pubdate和title要建索引,这是必须的,但是百万条记录对mysql来说已经到极限了,可以考虑换一个了,能达到0.43秒的那个兄弟是高手,你问他吧,我对优化不熟
公司运营系统中的mysql表,上亿条记录的N个,而且还join,速度绝对没有超来半秒的。
首先说明这不是MYSQL的问题,也不是它的极限。虽然我不喜欢MYSQL
没有其它条件情况下,单纯的用SQL来做,在所有的语句中,楼主的第一条语句做好索引是最快的,问题并不在语句本身,而在于索引没有做对。
查询的表的列的数量,列的长度,表的存储类型都会影响查询时间的