MyISAM

面试命中率90%的点 —— MySQL锁

不问归期 提交于 2020-10-28 15:43:35
一、对MySQL的锁的了解 当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。 就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。 二、隔离级别与锁的关系 在Read Uncommitted级别下,读取数据不需要加共享锁,这样就不会跟被修改的数据上的排他锁冲突 在Read Committed级别下,读操作需要加共享锁,但是在语句执行完以后释放共享锁。 在Repeatable Read级别下,读操作需要加共享锁,但是在事务提交之前并不释放共享锁,也就是必须等待事务执行完毕以后才释放共享锁。 SERIALIZABLE 是限制性最强的隔离级别,因为该级别锁定整个范围的键,并一直持有锁,直到事务完成。 三、按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法 在关系型数据库中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。 MyISAM和InnoDB存储引擎使用的锁: MyISAM采用表级锁(table-level locking)。InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁。 行级锁,表级锁和页级锁对比

深入了解MySQL的索引

我的梦境 提交于 2020-10-28 12:22:25
(一)关于存储引擎 创建合适的索引是SQL性能调优中最重要的技术之一。在学习创建索引之前,要先了解MySql的架构细节,包括在硬盘上面如何组织的,索引和内存用法和操作方式,以及存储引擎的差异如何影响到索引的选择。 MySQL有很多种衍生版本,这些衍生版本支持更多不同种类的存储引擎。本文主要讨论三种MySQL引擎。 MyISAM 一种非事务性的存储引擎,是MySQL 5.5之前版本默认的存储引擎。 InnoDB 最流行的事务性存储引擎,从5.5版开始成为MySQL默认的引擎。 Memory 基于内存的,非事务性的以及非持久性的存储引擎。 注意: 从5.5版本开始,MySQL表的默认存储引擎从MyISAM换成InnoDB,将会使用户安装那些依赖默认设置或者专门为MyISAM编写的软件包时带来很大的影响。 (二)MySQL索引类型 MySQL支持在所有关系数据库表中创建主键、唯一键、不唯一的非主码索引等多种类型的索引。此外MySQL还支持纯文本和空间索引类型。 MySQL内置的存储引擎对各种索引技术有不同的实现方式,包括:B-树,B+树,R-树以及散列类型。 索引数据结构理论: 1.B-树 B-树中有两种节点类型:索引节点和叶子节点。叶子节点是用来存储数据的,而索引节点则用来告诉用户存储在叶子节点中的数据顺序,并帮助用户找到相应的数据。 B-树的搜索,从根节点开始

Mysql索引(简单了解)

拈花ヽ惹草 提交于 2020-10-28 11:43:42
Mysql的存储引擎,可以针对不同的表使用不同的存储引擎   MyISAM:插入,查血速度快,但是不支持事物,所以适用于数据仓库,Web等   InnoDB:支持事物,所以适合于事物型数据库   Memory:是将数据存到内存中   Archive:事物不安全,所以可以用来保存日志什么的 每个引擎细致的还有许多特点,有空可以看看 ----------------------------------------------------------------------------------   索引   Mysql存储引擎有两种 B树和Hash   索引的优点:可以针对指定的一个列或者多个列建立索引,加快查询速度         可以减少分组或者排序子句的执行时间   索引的缺点:多占内存         对表进行修改增加删除的时候,相应的索引也需要更改   索引的分类:单列索引和组合索引           单列索引指的就是一个索引只有一个列,但是一个表可以有多个单列索引           组合索引指的就是在表的多个字段上创建的索引   全文索引:支持值的全部查找,允许重复和null   创建索引:在建立表的时候创建   简单的对某个列创建索引 查看索引是否创建成功   select_type指的是select的类型 比如简单查询,子查询,联合查询 table 查询的表名

Mysql(mysql总结)

久未见 提交于 2020-10-28 10:38:36
数据库结构( 原文 ) 在 InnoDB 存储引擎中,所有的数据都被逻辑地存放在表空间中,表空间(tablespace)是存储引擎中最高的存储逻辑单位,在表空间的下面又包括段(segment)、区(extent)、页(page): 1、.frm 文件用来描述表的格式或者说定义; 2、 .i bd 文件 数据索引、数据信息(默认所有表在一个文件中,打开 innodb_file_per_table设置按表区分 ); 同一个数据库实例的所有表空间都有相同的页大小;默认情况下,表空间中的页大小都为 16KB; 每个 16KB 大小的页中可以存放 2-200 行的记录。 索引 CREATE TABLE users( id INT NOT NULL, first_name VARCHAR( 20) NOT NULL, last_name VARCHAR( 20) NOT NULL, age INT NOT NULL, PRIMARY KEY( id), KEY(last_name, first_name, age) KEY(first_name) ); 聚集索引 B+ 树通过 B+ 树实现的就会使用 id 作为索引的键,并在叶子节点中存储一条记录中的所有信息。 所有正常的表应该有且仅有一个聚集索引(绝大多数情况下都是主键),表中的所有行记录数据都是按照聚集索引的顺序存放的。 辅助索引

MySQL的进程状态

大兔子大兔子 提交于 2020-10-28 10:13:47
通过show processlist查看MySQL的进程状态,在State列上面的状态有如下这些: Analyzing 线程对MyISAM 表的统计信息做分析(例如, ANALYZE TABLE )。 checking permissions 线程检查服务器是否具有所需的权限来执行该语句。 Checking table 线程正在执行表检查操作。 cleaning up 线程处理一个命令,并正准备释放内存和重置某些状态变量。 closing tables 线程改变表中的数据刷新到磁盘和关闭使用的表。 converting HEAP to MyISAM 线程从转换内部临时表MEMORY内存表到磁盘MyISAM表。 copy to tmp table 线程正在处理一个ALTER TABLE语句。 Copying to group table 如果语句有不同的ORDER BY和GROUP BY标准,按组排序并复制到一个临时表。 Copying to tmp table 服务器复制到内存中的临时表。 Copying to tmp table on disk 服务器复制到一个临时表在磁盘上。 Creating index 线程正在处理ALTER TABLE ... ENABLE KEYS。 Creating sort index 线程正在处理一个SELECT,使用内部临时表解决。

MySQL基础知识回顾

∥☆過路亽.° 提交于 2020-10-28 09:14:18
Mysql 基本准备 cmd登录 mysql -rusername -ppassword 显示授权用户 show grants 创建数据库 create datebase datebase_name 展示所有数据库 show datebase 使用数据库 use database_name; 建表 create table table_name( id int(11) auto_increment, name varchar(30), primary key(id) )default charset=utf8; 展示表 show tables 删表 drop table table_name 修改表 alter table table_name 重命名表 rename table table_name to table_name 展示列 show columns form table_name 查询 基本查询 select select * from table_name; 条件查询 select where select * from table_name where id = ?; 分页查询 select limit select * from table_name limit 0,5; 查询不同行 select distinct select distinct colunm

快手Java后台三面,意向已拿,复盘面试官都问了些啥?

非 Y 不嫁゛ 提交于 2020-10-26 10:51:26
快手的面试挺有挑战性的感觉哈哈哈哈,不过我觉得挺有意思的,感觉啥都能问到。(二面是10天前约的面试,差点要忘了)然后是HR面,昨天就收到offer 一面二面啥的我都忘记具体的了,就简单的总结一下 基础 int float short double long char 占字节数? int 范围?float 范围? hashcode 和 equals 的关系 深拷贝、浅拷贝区别 java 异常体系?RuntimeException Exception Error 的区别,举常见的例子 lambda 表达式中使用外部变量,为什么要 final? 集合 集合这块关注一下 1.8 的实现吧,和 1.7 相比变化了很多 Collection 有什么子接口、有哪些具体的实现 简单介绍下 ArrayList 怎么实现,加操作、取值操作,什么时候扩容? 讲一下 hashMap 原理。hashMap 可以并发读么?并发写会有什么问题? 讲一下 concurrentHashMap 原理。头插法还是尾插法?扩容怎么做? 堆是怎么存储的,插入是在哪里? 集合在迭代的过程中,插入或删除数据会怎样? 并发 线程进程和线程的区别?并行和并发的区别?了解协程么?进程间如何通信:进程 A 想读取进程 B 的主存怎么办?线程间通信?线程的生命周期有哪些状态?怎么转换?wait 和 sleep 有什么区别

110道python面试题

a 夏天 提交于 2020-10-25 05:48:19
1、一行代码实现1--100之和 利用sum()函数求和 2、如何在一个函数内部修改全局变量 函数内部global声明 修改全局变量 3 、列出5个python标准库 os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数 re: 正则匹配 math: 数学运算 datetime:处理日期时间 4、字典如何删除键和合并两个字典 del和update方法 5、谈下python的GIL GIL 是python的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。 多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大 6、python实现列表去重的方法 先通过集合去重,在转列表 7、fun(*args,**kwargs)中的*args,**kwargs什么意思? 8、python2和python3的range(100)的区别 python2返回列表,python3返回迭代器,节约内存 9、一句话解释什么样的语言能够用装饰器?

20200616学习笔记

时光毁灭记忆、已成空白 提交于 2020-10-25 03:46:37
count(*) 的实现方式 在不同的 MySQL 引擎中,count(*) 有不同的实现方式 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数 注意讨论的是没有过滤条件的 count(*),如果加了 where 条件的话,MyISAM 表也是不能返回得这么快的 InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于 count(*) 这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。因此,MySQL 优化器会找到最小的那棵树来遍历 小结: MyISAM 表虽然 count(*) 很快,但是不支持事务; show table status 命令虽然返回很快,但是不准确; InnoDB 表直接 count(*) 会遍历全表,虽然结果准确,但会导致性能问题。 那么如果你现在有一个页面经常要显示交易系统的操作记录总数,到底应该怎么办呢?答案是,我们只能自己计数 不同的 count 用法 count(字段)<count(主键 id)<count(1)≈count(*) count(主键 id) :,InnoDB 引擎会遍历整张表

MySQL数据库最全知识点+面试题整理

主宰稳场 提交于 2020-10-24 16:18:49
数据库,尤其是关系型数据库,是程序员日常使用最多的。对优秀的工程师来讲,只会 CRUD 还不够,还需要理解其原理,理解其原理能够让程序员写出更加可靠高效的代码,并能够提升解决实际问题的能力,本篇文章将以 MySQL为例,和大家一起学习数据库原理。 数据库基础知识 1. 为什么要使用数据库 数据保存在内存 优点:存取速度快 缺点:数据不能永久保存 数据保存在文件 优点:数据永久保存 缺点:1)速度比内存操作慢,频繁的IO操作 2)查询数据不方便 数据保存在数据库 1)数据永久保存 2)使用SQL语句,查询方便效率高 3)管理数据方便 2. 什么是SQL? 结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询语言。作用:用于存取数据、查询、更新和管理关系数据库系统。 3. 什么是MySQL? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。 数据库三大范式是什么 mysql有关权限的表都有哪几个