php分页和数据表字段设计注意事项
来源:互联网 发布:bdu 大数据 编辑:程序博客网 时间:2024/05/16 18:59
大过年的无聊就做了个实验,因为这个问题一直在困扰我,分页SQL语句如何写才能对网站的访问速度最优。
1.两表关联
2.先读主表,再循环读从表信息
有多人和我说过其中某个好,每个人说的貌似都很有理有据,这让我一度十分迷惑,所以才有了今天的实验
首先我们先间两张简单表格,users
和 grade
分别对应着用户和成绩,用户id和用户名,数据量1亿+,成绩是用户3倍的数据,用户表数据总数如下图
首先我们来看一下关联数据表,模拟一页15条数据
<?php $sql = 'select * from `grade` as p1 left join `users` as p2 on p1.uid = p2.id where p1.`name` = \'数学\' order by p1.id DESC limit 15';$res = mysql_query($sql);while($one = mysql_fetch_assoc($res)){ print_r($one);}?>
运行结果,如下图显示
下面分开读取,因为需要从表的条件,所以我先读取从表再去读主表数据,这里平时可以根据自己实际情况设计代码
<?php $sql = 'select * from `grade` as p1 where p1.`name` = \'数学\' order by p1.id DESC limit 15';$res = mysql_query($sql);while($one = mysql_fetch_assoc($res)){ print_r($one); $sql1 = 'select * from `users` where id = '.$one['uid']; $res1 = mysql_query($sql1); $one1 = mysql_fetch_assoc($res1); print_r($one1);}?>
运行结果,如下图显示
从图上看,貌似分开写好像快一点,当然这点我们可以忽略,实际项目中加上一些逻辑处理,这种差别根本就不是区别,也就是说到现在为止,两种方法其实并没有太多区别。
那么我们来更加真实的模仿,加上求数据总数,这个是分页总个数计算的必要数据
首先我们还是模拟关联数据表,代码如下
<?php$sql = 'select * from `grade` as p1 left join `users` as p2 on p1.uid = p2.id where p1.`name` = \'数学\' order by p1.id DESC limit 15';$res = mysql_query($sql);while($one = mysql_fetch_assoc($res)){ print_r($one);}$sql1 = 'select count(p1.id) from `grade` as p1 left join `users` as p2 on p1.uid = p2.id where p1.`name` = \'数学\' ';$res1 = mysql_query($sql1);$one1 = mysql_fetch_assoc($res1);?>
来让我们看看结果如何,额,这样的结果,估计会被打死,8分钟啊,这要多好的耐心,多么忠实的粉啊
下面再看一下分开读取的结果
<?php $sql = 'select * from `grade` as p1 where p1.`name` = \'数学\' order by p1.id DESC limit 15';$res = mysql_query($sql);while($one = mysql_fetch_assoc($res)){ print_r($one); $sql1 = 'select * from `users` where id = '.$one['uid']; $res1 = mysql_query($sql1); $one1 = mysql_fetch_assoc($res1); print_r($one1);}$sql1 = 'select count(id) from `grade` where `name` = \'数学\'';$res1 = mysql_query($sql1);$one1 = mysql_fetch_assoc($res1);?>
虽然说这个速度也会被打死,不过要比之前好的多
从结果上看,分开读要比关联数据表更快,其实这里偷换了一个概念,我们在获取页面数据总数的时候前者是读取了两张表,后者只是一张,这个和Mysql的执行过程有关系,前者是先做了数据表关联,再求出总数,后者只是单一表的总数,所以速度上会快很多,所以在这里,我想说的是,对于页面的15条数据的读取方式差别不大,重点在于求分页总数上,关联表的速度会比单一表慢很多,为了避免这一情况,我们再设计数据表时,应充分考虑到字段和表的关系,将用于搜索的字段尽可能的放到一张表中。
最后在推荐一篇文章MySQL如何执行关联查询
- php分页和数据表字段设计注意事项
- ASP中重命名数据表字段的注意事项
- 数据表索引和字段修改
- 数据表命名和字段命名方法
- 常用数据表字段设计(来源于相关设计软件)
- 一个php分页设计
- 数据表分页
- 如何导出SAP的数据表字段和字段描述
- php获取mysql某数据表中所有字段
- MySQL数据库、数据表和字段字符集查询、修改和配置
- MySQL数据库、数据表和字段字符集查询、修改和配置
- MySQL数据库、数据表和字段字符集查询、修改和配置
- MySQL数据库、数据表和字段字符集查询、修改和配置
- PHP+mysql分页设计实例
- PHP设计完美分页类
- PHP:折线图和数据表的绘制
- sql server2005过系统表查出数据表的字段名称字段类型和字段长度
- 设计领域,数据表和对象的关系。
- [初学python]编写冒泡排序
- Oracle查询优化-01单表查询
- STL 优先队列 定义 优先级
- 数据结构预备知识
- windows文件与Linux文件互转
- php分页和数据表字段设计注意事项
- 从发布者和订阅者来看事件
- 马士兵javaSE小项目chat和Tank单机版总结
- Myeclipse如何使用Maven添加jar包
- 如何配置jdk
- memcached I/O模型源码分析
- hdoj 2089
- 如何在Eclipse下查看JDK源代码
- 为什么一个java源文件中只能有一个public类?