前端每秒刷新的 PHP 接口文件,取同一数据库 5 张不同表里面的数据。

2016-09-12 15:05:40 +08:00
 pyengwoei
是用在一个 PHP 文件里面去把五张表的数据取好,然后组合成一个 string 返回给前端,还是做成 5 个 PHP 文件,每次取一张表数据分别返回好?
我现在是用的前面的方法,但是感觉有部分表里面的数据很慢,不及时。
难道是我 SQL 语句的问题吗?
$shoehistory=mysql_query("select * from table1 ORDER BY id DESC LIMIT 0,1 ");
$current=mysql_query("select * from table2 ORDER BY id DESC LIMIT 0,1 ");
$time=mysql_query("select * from table3 ORDER BY id DESC LIMIT 0,1 ");
$gamestatus=mysql_query("select * from table4 ORDER BY id DESC LIMIT 0,1 ");
$jieguo = "";
while ($row=mysql_fetch_array($shoehistory)) {
//echo $row[6];
$jieguo=$row[6];
}
while ($row=mysql_fetch_array($current)) {
//echo "|".$row[7]."#".$row[8]."#".$row[9]."#".$row[10]."#".$row[11]."#".$row[12];
$jieguo = $jieguo. "|".$row[7]."#".$row[8]."#".$row[9]."#".$row[10]."#".$row[11]."#".$row[12];
}
while($row2=mysql_fetch_array($time)){
//echo "|".$row2[5];
$jieguo = $jieguo. "|".$row2[5];
}
while ($row=mysql_fetch_array($gamestatus)) {
$jieguo = $jieguo. "|". $row[7];
//echo $row[7];
}
echo $jieguo;
4285 次点击
所在节点    程序员
37 条回复
ytmsdy
2016-09-12 15:39:24 +08:00
不要用 select *,最好要的字段都给带上。万一你的表里面有一个特别大的字段,然后你又用不到,这时间开销那就酸爽了。
imnpc
2016-09-12 15:51:47 +08:00
1.给数据表查询较多的字段加上索引
2.只查询必须的字段
pyengwoei
2016-09-12 15:54:49 +08:00
@ytmsdy 不用 select? 可以简单写一个例子吗
pyengwoei
2016-09-12 15:55:50 +08:00
@imnpc 加索引是加一个 ID 吗? 只查询必须的字段这个我明白,确实这里有问题 感谢了
pyengwoei
2016-09-12 15:59:53 +08:00
@imnpc 请问一下,排除 SQL 语句,我的第一种做法,和第二种做法哪一种好些啦
shakyamuni
2016-09-12 16:00:54 +08:00
加索引,使用长轮寻。
keikeizhang
2016-09-12 16:02:58 +08:00
这个事情有 laravel 框架分分钟解决
former
2016-09-12 16:04:19 +08:00
可以试试 websocket
ten789
2016-09-12 16:04:31 +08:00
1 个比 5 个好 cache 最好
pyengwoei
2016-09-12 16:05:30 +08:00
@keikeizhang 现在是小项目,前端 HTML 才 100 多行代码,后台 PHP 文件也才 80 多行。。
pyengwoei
2016-09-12 16:07:12 +08:00
@ten789 是啊,只是现在项目才开始,现在是以搞出来为目的,后期稳定了再进去升级
imlewc
2016-09-12 16:13:56 +08:00
@keikeizhang 这个跟框架什么关系 这么推荐 laravel 是不是有点牵强了 缓存可以试下
ytmsdy
2016-09-12 16:33:55 +08:00
@pyengwoei 我的意思是不要用 * 不是不要用 select !!
pangliang
2016-09-12 16:42:19 +08:00
你这些在意义上都是缓存数据, 所以你放 mysql 再查出最后一行来, 当然别扭; 上 memcache 或者 redis
pyengwoei
2016-09-12 16:45:55 +08:00
@pangliang 是的,数据是在实时更新的,每次取最新的数据
dream7758521
2016-09-12 16:47:22 +08:00
@ytmsdy 这里就你的靠谱,其他人一上来,就推荐屠龙秘籍
pyengwoei
2016-09-12 16:58:41 +08:00
@dream7758521 也不是 大家看到的问题不同,@ytmsdy 的最简单直接而已 呵呵, select * 这里确实有问题
laobaozi
2016-09-12 17:15:18 +08:00
每次都从 5 张表里取最新的第一条,不知道这 5 个第一条是不是有什么联系
第一是考虑,如果能将这 5 条合并到一张表或者能找到合适的字段做外联,那么一次 sql 的执行全部查出来将提高不少效率
第二就是缓存 sql 结果,更新数据时清除再缓存
pyengwoei
2016-09-12 17:20:16 +08:00
@laobaozi 好的,我仔细想想,看来 SQL 这里 有很大的提高空间。
“”第二就是缓存 sql 结果,更新数据时清除再缓存“” 这个的意思是,不用每次都插入新的一条数据,表里面只留最新的数据的意思吗? 我现在好像确实表里面有几万数据了
akira
2016-09-12 17:20:36 +08:00
id 肯定是自增索引吧,先取 max id ,再取对应行的数据会快很多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/305683

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX