mysql这么慢???select * from list ORDER BY id DESC LIMIT 49990,10 竟然需要7秒??!! 这么惨,还有更惨的:http://www.csdn.net/Expert/TopicView1.asp?id=982294 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1、当记录很多的时候,在查询的时候千万不要用select *,因为这样查出来的数据集一般很大的。即使你加的是limit子句。2、当数据记录很多时,最好是手动的创建索引,并且创建索引一定要选一个最适合的键。当索引选择的不适合的时候比让系统自动创建索引更差劲。3、在数据库设计的时候最好还是注意一些优化。用mysql好久了,觉得它还是一个挺不错的数据库。我们一个系统是用SQL Server+asp,另几套系统是用MySQL+php,感觉还是MySQL+php更好一些。当然,MySQL+php是得用在linux下的,用apache作web服务器。 丢丢:照你第一条所说,除select以外还有没有读取表数据的其它语句?能否告诉我应该如何优化这个表?请据个例子。我对数据库不是很熟,请多帮忙啦。 我必须使用select *,因为所有字段我都需要读取,这是没办法的。 不妨试一下这个:select SQL_BIG_RESULT * ...SQL_BIG_RESULT 明确指示 MYSQL 该查询的结果集很“大”,有利于 MYSQL 进行优化俺也很想知道 SQL_BIG_RESULT 到底有多大效果 我做数据库的经验也不是很多,所有说一些也不知道对不对。如果不对请多多包涵。首先是设计数据库时要尽可能坚持实体表与关系表相分离。你字段很多,但是冗余很大,当数据库大的时候你就得想法减小它的冗余。我说的不要用select *不是指你不要用select语句,而是我想你这么多字段不会是同时使用吧?所以只查你需要某时候需要使用的字段。比如select last_user_id,last_username,last_reply_time ……我一般在这种时候都是很用心的去设计数据库,然后查询通过建立临时表来实现。我发觉这种方法也挺有效的。上面alexxing说的用"SQL_BIG_RESULT",我也只听说过,没有使用过。象你上面,数据库在实现的时候,事实上也相当于是先建立了一个临时表,然后取从49990开始的10条记录。时间主要是花在建立50000条记录集上。说的不对的,请多多指教。 SQL_BIG_RESULT应该是用在select * from table这样的大查询上的吧?现在只需要选择10条记录。应该不算这个情况吧。 squiral(丢丢),如果像你所说,那mysql这个速度实在没法用,它不可能这么笨,还要建立50000条数据的临时表。如果让我设计数据库(其实我自己做过将所有数据存入一个定长字段的文件中)。我通过索引直接从硬盘某个点读到另外一个点,这就读取了一条记录,然后多次循环得到10条。我想mysql也是这样的。所谓临时表在我概念中应该是另外一种表类型(也就是内存表),这个需要单独设置才行。继续~~~继续~~~大家踊跃发言~~~分不够再加! 我也准备测测看。不过不知道我的测试机器P133/32M RAM的内存够不够。 我说的不是指它真正建立了一个临时表,我是打了这样一个比方,可能不太准确吧。但是一条查询语句它不可能是一下子得到结果的,它是经过多个步骤进行筛选的。它当然不可能在内存中建立一个50000条的临时数据表,但是它处理的经理就和这类似。这就好比以前不推荐用A.id=B.id进行连接一样,因为它运用的是笛卡尔集,但是现在没有这种限制了吧?因为数据库实现时进行了优化,但它的机理还是这样的。创建索引的目的就和你说的一样,如果能从索引找到记录它就可以直接从硬盘上取得数据,但是如果索引做得不合适的话,就不能运用索引了。这就是我为什么说要创建一个合适的索引的原因。 squiral(丢丢) 依照搂住的设计,该如何创建合适的索引呢? 我的测试结果是:select * from list ORDER BY id DESC LIMIT 49990,102.18 secselect * from list ORDER BY id LIMIT 0,100.03 sec你不如把排序改一下? 这个问题我也遇到了,就算你把语句改成select * from list ORDER BY id DESC LIMIT 0,10 还是会很慢,你知道为什么吗,你只要加上desc就会很慢,原因是因为你的PHP版本和mysql版本不一致造成的 变量后面的->之后的内容无法编译 php上传始终不行 。 php tidy 接口的问题。 老问题重提,为什么不断刷新,session还是会失效? 关于文件调用时候的路径处理问题 急!求一个好看实用的PHP+JS分页!效果类似百度 新手请教 如何做到PHP与Linux程序的交互? 新手提问简单问题 那个php论坛比较好啊,推荐一个 编号自动生成问题 如何安装gd图形库,谢谢
2、当数据记录很多时,最好是手动的创建索引,并且创建索引一定要选一个最适合的键。当索引选择的不适合的时候比让系统自动创建索引更差劲。
3、在数据库设计的时候最好还是注意一些优化。
用mysql好久了,觉得它还是一个挺不错的数据库。我们一个系统是用SQL Server+asp,另几套系统是用MySQL+php,感觉还是MySQL+php更好一些。当然,MySQL+php是得用在linux下的,用apache作web服务器。
能否告诉我应该如何优化这个表?请据个例子。我对数据库不是很熟,请多帮忙啦。
首先是设计数据库时要尽可能坚持实体表与关系表相分离。你字段很多,但是冗余很大,当数据库大的时候你就得想法减小它的冗余。
我说的不要用select *不是指你不要用select语句,而是我想你这么多字段不会是同时使用吧?所以只查你需要某时候需要使用的字段。比如select last_user_id,last_username,last_reply_time ……
我一般在这种时候都是很用心的去设计数据库,然后查询通过建立临时表来实现。我发觉这种方法也挺有效的。
上面alexxing说的用"SQL_BIG_RESULT",我也只听说过,没有使用过。
象你上面,数据库在实现的时候,事实上也相当于是先建立了一个临时表,然后取从49990开始的10条记录。时间主要是花在建立50000条记录集上。
说的不对的,请多多指教。
现在只需要选择10条记录。应该不算这个情况吧。
如果让我设计数据库(其实我自己做过将所有数据存入一个定长字段的文件中)。我通过索引直接从硬盘某个点读到另外一个点,这就读取了一条记录,然后多次循环得到10条。我想mysql也是这样的。所谓临时表在我概念中应该是另外一种表类型(也就是内存表),这个需要单独设置才行。继续~~~继续~~~
大家踊跃发言~~~分不够再加!
select * from list ORDER BY id DESC LIMIT 49990,10
2.18 secselect * from list ORDER BY id LIMIT 0,10
0.03 sec你不如把排序改一下?
select * from list ORDER BY id DESC LIMIT 0,10 还是会很慢,你知道为什么吗,你只要加上desc就会很慢,原因是因为你的PHP版本和mysql版本不一致造成的