1.很多人认为count查询非常快,但是在加上筛选条件那就是未必的了!
测试:user表中4000w数据
(1).SELECT count(*) from user; 用时0.00s (2).SELECT count(*) from user where id>1000; 用时7秒
为什么统计全部速度快,不统计全部却慢了?因为mysql默认已经统计过表中的总记录了,所以查询非常快
2.优化count案例.假设需要查询数据中user表id大于1000的数据,如何快速查询?(上面的查询用时7秒!)
select ((SELECT count(*) from user) -(SELECT count(*) from user where id<1000));
原理:需要id大于1000的人数=总人数-id小于1000的人数(总人数mysql秒完成,id小于1000的人数记录少查询快)
3.以上的方法只是解决了部分场景,假如现在需要统计用户注册渠道呢?假设注册渠道有QQ和微信,并且2种渠道注册人数一致,数据达到百万.
那么 SELECT count(*) from user where way='qq';和 SELECT count(*) from user where way<>'qq' 无区别.
这种情况就建议建立统计表,用户注册事件发生即可+1操作.
我们从一个结果集中查询信息一般都是select * from (select...),每次都要编写from (select...)非常麻烦,于是我们将结果集保存起来,这就是视图的便利。创建视图的命令为:create view &nb...
1.floor(x)返回小于x的整数,向下取整,用法,商品的价格是浮点型的,需要向下取整 eg:select id,title,floor(price) from shopgoods2.rand()返回0-1之间的随机数 select rand() select rand()...
在项目中发现大量的form连接表,就开始质疑inner join 和 form a,b的性能问题。找到一份有价值的资料,特别记录:ANSI SQL规范首选INNER JOIN语法。此外,尽管使用WHERE子句定义联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结条件,有时候这样做也能影响性...
项目中查询数据部分字段出现null,影响到了排序,但是由于没有数据库权限,还想将null转为其他值表示;例如现有表member的原始数据:SELECT * FROM memberid &n...
concat函数用于连接多个字段和字符串,假如有一张用户表,希望将姓名和国籍字段同时合并输出。原表内容:id name country 1 张三 中国 2 李四 日本 3 王五 美国SQL语句:SELECT CONCAT(name,' (',count...
(1).查询某个字段是否包含某个字符串,可以直接使用likeSELECT oid,oname from zhongxing_options where oname li...