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聚簇索引和非聚簇索引

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