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操作.
1.定长和变长的分离 如int,char,time所占字节是固定的字段放在一张表 如varchar,text所占字节不确定的字段放在一张表中2.常用字段和不常用字段进行分离,根据查询频率来设计3.一对多的关联表可以添加冗余字段,如商品分类表 和商品表 ,在首页中需要显示每个分类商...
where与having非常类似.都能筛选数据.表达式完全一致. 但是职责的确不同.where负责对表中的字段进行筛选,having负责对where筛选后的结果集再次筛选。这也就是where不能使用别名字段来筛选的原因,因为数据中没有这个字段。&n...
需求查询出存在商品的商品分类. 先看看分类表:id(分类的id) catename(分类名) 1 手机 2 &n...
一般情况下,绝大部分,我们的主键是数字,1 2 3 4...所以我们才让它递增.这并不意味着,他们两个必须要绑定在一起使用.例如我还想将用户表的email字段设置为主键,但是并没有必要为其设置自增。 因此可...
1.MyISAM 建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,.frm格式文件,存储表定义;.MYD格式文件,存储数据;MYI格式文件,存储索引;方便数据迁移,我只需将mysql安装目录下data文件中的表文件复制即可完成数据迁移,之前在搬迁多个dedecms中深有体会。 ...
1.查看歌曲表结构(主要是给name字段添加全文索引)(mysql5.7才支持全中文索引)desc music; +---------+-------------+------+-----+---------+----------------+ | Fie...