1、首先新建一个test数据库,在数据库里创建一张data数据表,在表内插入5条测试数据。
2、新建一个php文件,命名为test.php,用于讲解使用sql查询数据表前三天的数据。
3、在test.php文件内,使用header()方法设置文件执行的编码为utf8,避免输出中文时产生乱码。
4、在test.php文件内,使用数据库账号、密码、名称,利用mysqli创建数据库连接,并使用set_charset()方法设置获得数据的编码为utf8,同时,使用if语句判断连接数据库是否成功,如果连接不成功,输出错误信息。
5、在test.php文件内,编写sql语句,使用TO_DAYS()分别获得当前的天数和数据表ctime字段数据的天数,两者之差小于3天,即前三天,以此为条件查询data数据表的数据,使用query()执行sql语句,同时使用fetch_all()方法将获得的数据资源转换为二维数组。
6、在test.php文件内,使用foreach方法遍历上一步获得的二维数组,输出数据的id和姓名。
7、最后在浏览器运行test.php文件,查看程序执行的结果,可见,成功从数据库获得前三天的数据。
为什么说是臆测呢,因为我猜这并不是问很极端的情况。详细说来,拆解每个查询消耗的时间,并不是每个步骤都与行数有关。
查1行,查10行,网络通讯都是占大部分时间,所以是10倍。
但是,如果你一次查10w行,并不会比10w次1行快10w倍,因为大数据量查询本来就慢。
延伸一下,以前我们做过一个优化,又来用这个case连续讲了4-5年。
这是一个UPDATE table SET col = col + N WHERE key = ?的查询,大概有5k QPS左右,跑不动。
改成了UPDATE table SET col = col + 1 WHERE key IN (?, ?, ?..... )的样子,数据库CPU从40%降到1%。
这个改变没有改变任何索引使用和网络传输,是不常见的,解析SQL瓶颈。
写这个例子,是要说,优化要根据具体情况分析,数据量和使用情况都会影响结论。
在MYSQL中有很多的时间函数都能实现这样的功能,不能直接小于的用法,可以选择减法的得结果的方式去获得结果,举例,select * from 表名WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 6
dete_col : 时间列名(筛选条件列)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)