用户
 找回密码
 入住 CI 中国社区
搜索
楼主: pp18180058
收起左侧

[数据库] Hex来~~mysql查询优化问题

[复制链接]
发表于 2008-12-12 10:29:17 | 显示全部楼层
如果去掉 ORDER BY,性能能够提高多少?

另外,刚发布的MySQL 5.1对index的算法优化过了,你可以测试一下看看~
发表于 2008-12-12 10:38:02 | 显示全部楼层
另外,5.1新增了table partition的功能,对高数据量(比如楼主的)的数据库应当能有性能上的提高~
 楼主| 发表于 2008-12-13 09:41:19 | 显示全部楼层
去掉order by 是0.29s

5.1没试过, 我下载一个试试~~~
 楼主| 发表于 2008-12-13 18:43:31 | 显示全部楼层
100 rows fetched in 0,0048s (0.3416s)

0.34s,只快了一点点
 楼主| 发表于 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倍
发表于 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了
 楼主| 发表于 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 秒~~
发表于 2009-1-29 12:31:54 | 显示全部楼层
分                  表
发表于 2009-2-14 12:40:54 | 显示全部楼层
9# tboqi
你不明白那就对了,没见过这么建索引的。
发表于 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来做,在所有的语句中,楼主的第一条语句做好索引是最快的,问题并不在语句本身,而在于索引没有做对。

查询的表的列的数量,列的长度,表的存储类型都会影响查询时间的

本版积分规则