1、Mysql去重
distinct关键字:SELECT DISTINCT d.id from user d;
group By
2、回表查
当查询的字段为非聚集索引的时候会造成回表查询,因为非聚集索引存储的是该数据对应的聚集索引主键值,获取主键值后再根据主键值查询对应的数据
3、索引覆盖
使用非聚集索引查询
4、索引的类型
聚集索引:主键索引就是聚集索引,查询速度快,叶子结点存储的是该数据的其他字段信息。
辅助索引(非聚集索引):普通索引,一个表可以有多个,叶子节点存储的是聚集索引的主键值,涉及回表查询。
联合索引:由多列组成,需要遵从最左原则,对 where,order by,group by都生效
覆盖索引:指从辅助索引中就能获取到需要的记录,而不需要查找聚簇索引中的记录。使用覆盖索引的一个好处是因为辅助索引不包括一条记录的整行信息,所以数据量较聚集索引要少,可以减少大量io操作。
5、聚集索引与非聚集索引的区别
聚集索引叶子节点存储的当前数据的所有字段值,非聚集索引存储的是数据的主键Id
6、最左原则
假设联合索引由列(a,b,c)组成,则一下顺序满足最左前缀规则:a、ab、abc;selece、where、order by 、group by都可以匹配最左前缀。其它情况都不满足最左前缀规则就不会用到联合索引。
7、sql优化
1、避免在索引上使用关键字
2、linke 的百分号如果在 左边会导致索引失效 like 'a%' 索引生效 like '%a%' 索引失效
3、可通过expain 关键字查询执行过程
8、acid
a:原子性:一个事务要么sql的执行都成功要么都失败
c:一致性:事务执行完成数据之间的关系必须符合要求的 类似银行转钱,发款人 -100 收款人必须+100
i:隔离性:并发环境下多个事务之间相互不影响
d:持久性:事务一旦提交对于数据库来说这条数据的更新状态就是永久的,即便数据库宕机也不回影响到数据。
9、事务的隔离机制
读未提交:事务A读取到事务B未提交事务所修改的数据
读已提交:事务A只能读取到事务B提交事务并成功的数据,在数据库存储的数据。
可重复读:
10.mysql innodb和myisam区别
myisam不支持事务 不支持行锁。
innodb 支持事务,支持行锁
清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表。
MyISAM适合:
(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁,如果执行大量的SELECT,MyISAM是更好的选择;
(3)没有事务。
InnoDB适合:
(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建;
(3)如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表;
(4)DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的 删除;
(5)LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
要注意,创建每个表格的代码是相同的,除了最后的 TYPE参数,这一参数用来指定数据引擎。
网友评论