如何设计一个购物车

系统设计 , , ,
答案 未登陆时,新增产品放在本地浏览器的Cookie中。 登陆时,同步购物车数据到服务器,同步完成后删除本地Cookie。 已经登陆状态,新增产品直接添加到服务器。 对于服务器数据保存的位置,访问量不大就直接存储在MySQL,访问量大就以集合方式存储在Redis,速度快又能保证唯一。 因为Redis数据…

MySQL 索引最左前缀原则

MySQL ,
答案 查询方式 能否用上索引 --------------------------------------+---------------------------- select * from users where a=1 and b=2 能用上a、b select * from users where b=2 and a=1 能用上a、b(有MySQL查询优化器) select * from users where a=2 and c=1 能用上 a select * f…

MySQL INT和CHAR隐式类型转换需要注意什么?

MySQL
答案 主要需要记住下面两点: 当查询字段是INT类型,如果查询条件为CHAR,将查询条件转换为INT,如果是字符串前导都是数字,将截取前导数字用来比较,如果没有前导数字,则转换为0。 当查询字段是CHAR/VARCHAR类型,如果查询条件为INT,将查询字段为换为INT再进行比较,可能会造成全表扫描。 …

MySQL事务的隔离级别

MySQL , ,
答案 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。 低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 这4种隔离级别是: Read Uncommitted:读取未提交内容 Read Committed:读取提交内容 Repeatable Read:可重读 Se…

MySQL如何高效率随机获取N条数据?

MySQL
答案 假设表叫做mm_account。 ID连续的情况下(注意不能带where,否则结果不好): SELECT * FROM `mm_account` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `mm_account`)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id ASC LIMIT 4; ID不连续的情况下: SELECT * FRO…

简述MySQL聚簇索引和非聚簇索引

MySQL ,
答案 聚簇索引的叶节点就是数据节点,而非聚簇索引的叶节点仍然是索引节点,并保留一个链接指向对应数据块。 MyISAM的是非聚簇索引,B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。 InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上 MySQL Inn…