MySQL
鲁花菜籽油
这个作者很懒,什么都没留下…
展开
-
事务、事务的四大特性ACID、并发访问的问题、四种隔离级别
事务事务是一组命令的集合,它是一个整体,所有的SQL语句都必须执行成功。如果其中一条SQL语句出现异常,则所有的SQL语句都要回滚,整个事务执行失败。事务的四大特性ACID原子性(Atomicity):每个事务都是一个整体,不可再拆分。事务中所有的SQL语句要么全部执行成功,要么全都不执行。一致性(Consistency):事务在执行前数据库的状态与执行后数据库的状态保持一致。比如:转账前2个人的总金额是2000,转账后2个人的总金额也是2000.隔离性(Isolation):事务与事务之间不应原创 2021-10-28 20:51:19 · 191 阅读 · 0 评论 -
什么是覆盖索引
覆盖索引 select 的数据列只用从索引中就能够取得,不需要回表进行二次查询,也就是说查询列要被所使用的索引覆盖。对于 InnoDB 表的二级索引,如果索引能覆盖到查询的列,那么就可以避免对主键索引的二次查询。 不是所有类型的索引都可以成为覆盖索引。覆盖索引要存储索引列的值,而哈希索引、全文索引不存储索引列的值,所以MySQL使用B+树索引做覆盖索引。 对于使用了覆盖索引的查询,在查询前面使用explain,输出的extra列会显示为using index。比如有个用户订单表,组合索引为 (原创 2021-10-22 15:26:24 · 3290 阅读 · 1 评论 -
索引什么时候会失效
对于组合索引,未使用组合索引最左边的字段,则不会使用索引。以%开头的like查询如%abc,无法使用索引;非%开头的like查询如abc%,相当于范围查询,会使用索引。查询条件中列类型是字符串,但是没有使用引号,可能会因为类型不同发生隐式转换,使索引失效。MySQL在使用不等于号(!=或者<>)的时候无法使用索引会导致全表扫描。is null、is not null 也无法使用索引。对索引列进行运算。查询条件使用or连接,也会导致索引失效。...原创 2021-10-22 12:33:47 · 675 阅读 · 0 评论 -
where和having的区别
where在分组之前过滤数据,即先过滤再分组;where后面不可以使用聚合函数。having在分组之后过滤数据,即先分组再过滤;having后面可以使用聚合函数。原创 2021-10-20 14:20:06 · 105 阅读 · 0 评论 -
B树和B+树的区别
B树B+树B树和B+树的区别:B树的非叶子节点中存储了关键字和记录,还有指向下一个节点的指针;叶子节点存储了关键字和数据记录。而B+树只在非叶子节点中存储了关键字和指向下一个节点的索引,并没有存储数据记录,数据记录全部存储在叶子节点中,且B+树的叶子节点使用指针连接在一起。在B树中,越靠近根节点的记录查找时间越快,只要找到关键字即可确定记录的存在;而B+树中每个记录的查找时间基本上是一样的,都需要从根节点走到叶子节点,而且在叶子节点中还要再比较关键字。从这个角度看B树的性能好像要比B+树好,而在原创 2021-09-24 18:05:24 · 565 阅读 · 0 评论 -
InnoDB存储引擎的主要优点
InnoDB是一种可靠性高的高性能MySQL数据库存储引擎,主要优点包括:它遵循ACID模式设计,具有与事务(Transactions)、回滚和保护用户数据的崩溃恢复能力。InnoDB引擎在主内存中维护了一个buffer pool,用来缓存表和索引,频繁访问的数据会直接在内存中操作。如果缓存中或者磁盘中的数据有损坏,MySQL的数据校验机制会在你使用它之前提醒你。设计表时为每个表添加了主键,会自动优化涉及列的操作。也就是说基于主键的查询、排序、聚合性能会很高。InnoDB提供行级锁,拥有与Ora原创 2021-09-23 12:37:10 · 2333 阅读 · 0 评论 -
MyISAM与InnoDB 的区别(9个不同点)
区别:InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查转载 2021-09-23 12:12:03 · 3139 阅读 · 0 评论 -
InnoDB为什么推荐使用自增ID作为主键?
InnoDB中,表中的数据是直接存储在主键聚簇索引的叶子节点上的,每插入一条记录,其实都是增加一个叶子结点,如果主键是顺序的,只需要把新增的一条记录存储在上一条记录的后面。当页达到最大填充因子的时候,下一条记录就会写入新的页中,这种情况下,主键页就会近似于被顺序的记录填满。 若表的主键不是顺序的id,而是无规律数据,比如字符串,InnoDB无法简单的把一行记录插入到索引的最后,而是需要找一个合适的位置(已有数据的中间位置),甚至产生大量的页分裂并且移动大量数据;在寻找合适位置进行插入时,目标页可能不原创 2021-09-23 11:56:05 · 719 阅读 · 0 评论 -
聚簇索引和非聚簇索引(二级索引、辅助索引)
索引 索引是快速查找排好序的一种数据结构。与索引有关的最重要的部分是磁盘,磁盘的性能直接影响数据在数据库的查询效率。索引的设计必须要尽可能地降低无效数据的读写访问。聚簇索引聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。具体的细节依赖于其实现方式,但InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。聚簇索引在每个表中只有一个,且是建立在主键列上面的。【注意:如果没有定义主键,InnoDB会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB会隐式定义一个原创 2020-09-11 20:56:49 · 953 阅读 · 0 评论