MySQL中的部分小技巧

熬夜看代码已经养成了习惯,如果看看优秀的代码还是值得的,但是如果是烂代码就太浪费时间了,总结下大致看到的一些问题,主要是关于MySQL中的SQL语句问题,下面一起来看看吧! 第一个问题,关于分页处理,在一般情况下面我们都会使用如下语句来进行分页查询

1
SELECT * FROM TABLENAME LIMIT x,y;

如果在数据量较少的情况下上面的语句是ok,没有可以挑剔的地方,但是当数据量较大或者是超过了1000W以上呢? 这样的语句还ok 吗?这样的语句就没有一点问题吗?或许你可以执行

1
EXPLAIN SELECT * FROM TABLENAME LIMIT 10000000, 10;

看看这样的SQL执行的效率有多高,很多程序员都会这样写,包括我看到的部分代码也一样。其实我们还是可以换一种方式来处理这样的问题,比如这样的SQL

1
SELECT * FROM TABLENAME WHERE id > n LIMIT x, y;

其实有了这样一个条件,则可以过滤除开条件以外的数据,从而减少了扫描数千万的数据带来性能影响,在数据量较大的情况下,你的收益还是蛮高的,不信你就试试看吧~ 另外还有几种模式,一起介绍给大家。 mysql查询今天,昨天,近7天,近30天,本月,上一月数据的sql语句的优化,具体可参看如下: 查询当日的数据

1
SELECT * FROM TABLENAME WHERE to_days(current_time) = to_days(now());

查询昨天的数据

1
SELECT * FROM TABLENAME WHERE to_days(now()) – to_days(current_time) <= 1;

查询近7天的数据

1
SELECT * FROM TABLENAME WHERE date_sub(curdate(), INTERVAL 7 DAY) <= date(current_time);

查询近30天的数据

1
SELECT * FROM TABLENAME WHERE date_sub(curdate(), INTERVAL 30 DAY) <= date(current_time);

查询本月的数据

1
SELECT * FROM TABLENAME WHERE date_format(current_time, '%Y%m') = date_format(curdate() , '%Y%m');

查询上一月的数据

1
SELECT * FROM TABLENAME WHERE period_diff(date_format(now() , '%Y%m') , date_format(current_time, '%Y%m')) =1;

希望能帮助各位路人。

(The End)

坚持原创技术分享,您的支持将鼓励我继续创作!