-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmysql.txt
228 lines (127 loc) · 8.42 KB
/
mysql.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
--- MySQL 相关题目分享 ---
1、简单描述下 MyISAM引擎 和 InnoDB引擎
2、简单描述下 乐观锁 和 悲观锁
3、ACID 分别代表什么 ,通过什么技术手段实现
4、隔离性有哪几个级别,之间的区别是什么?
5、MySQL 默认的页大小是多少?可以调整吗?调整后有哪些影响?
6、MySQL中都使用了哪些常见的索引数据结构?
7、为什么使用B+树?
8、解释下什么是聚簇索引?
9、简单解释下 二级索引实现
10、简单描述下 join 操作有哪些实现策略?
11、left join/right join/inner join 有什么区别
12、binlog 有哪几种形式?分别有什么好处?
13、select count(id) 和 select count(*) 有什么区别,哪个效率高?
14、解释下 explain 语句的输出
15、怎样查看 table 基础信息
16、怎样查看 MySQL 基础信息
17、怎样查看一个表的索引信息
18、怎样在 select 语句中强制使用某个索引
19、什么是组合索引,怎么实现,查询时需要注意什么?
20、表中索引越多越好这种说法正确吗,为什么?
21、存储过程是什么?使用中有哪些需要注意的点?
22、innodb_buffer_pool_size 这个参数有什么意义?
23、drop table t1,t2; 这句话的执行是原子的吗?为什么?在MySQL的新版本中又是怎么解决的?
24、lock table table_name 有什么作用?
25、表中的 auto_increment 列是通过什么方法来解决并发访问的?
26、SQL 中 怎么判断某一列的数值 是 NULL?
27、当使用 UTF-8编码时,char 或者 varchar列实际占用的空间大小有什么特点?(考虑只有数字字母即 ASCII编码 和 中文等字符时所占用的实际空间大小区别)
28、varchar 存储怎么实现?
29、简单描述下 one-thread-per-connection 模式?
30、简单描述下 thread cache,以及实现?
31、order by 遇到NULL值时的行为是怎样的?partition操作呢?(提示:一样的行为,MySQL保证NULL比所有非NULL值要小,当然遇到HASH 函数,NULL值转换为数字0参与计算)
32、MySQL的 master-slave模式中,主从之间的网络需要一直保持畅通吗?为什么?
33、flush table 的作用有哪些?
34、select ... for share mode 加读锁还是写锁?
35、select ... for update 加读锁还是写锁?在任何情况下都会加锁吗(考虑 start trasaction 或 autocommit=0 )
36、MySQL中读不加锁 这句话对吗?如果不对,在哪些读操作下会加锁?(典型的如 metadata locking)
37、select count(*) 在MyISAM引擎和InnoDB引擎中有什么不同?(MyISAM数据存储在表元数据中,读取时间O(1))
38、select limit 分页有哪些优化策略?(多种方法组合)
39、select join 中on 条件 和 where条件有什么区别,join操作有哪些需要注意的点?(left join 和 right join 需要注意的点,还有on条件一般使用在辅助表中,
主表中的列最好不要参与on操作)
40、什么是覆盖索引?有什么作用?
41、什么是数据库sharding?
42、数据库分库分表有什么策略?
43、什么是 dirty read (脏读)?
44、什么是 phantom read(幻读)?
45、什么是 MVCC?
46、MySQL中是否支持session级的隔离级别?
(tips: set global|session transaction 命令行命令)
47、简单描述下gap-lock算法?
48、简单描述下next-key lock算法?
49、innodb_locks_unsafe_for_binlog 这个参数有什么作用?为什么开启后有可能产生幻读?
50、简单描述下double write策略?解决了什么问题?
51、为什么存储引擎返回的查询结果不是具体的一个记录,而是包括这个记录在内的页?
(tips:考虑内存拷贝特性,考虑预读特性,考虑CPU对于内存数据查找的高效性)
52、用什么办法检测磁盘上数据正确性?为什么?
53、NULL值在磁盘上是怎么存储的?
54、MySQL Server 中有哪几种线程,分别负责什么工作?
55、MySQL数据页都有哪些格式?
56、MySQL的B+树索引高度一般为多少?通过什么方法来实现?为什么这么设计?
57、简单描述下kd-tree的思想?
58、简单描述下R-tree结构,应用于哪种类型的业务?
59、简单描述下位图索引的应用,及需要注意的问题?
(tips:主要关注数据量变化时,位图索引的调整)
60、外部排序常用的算法是什么?
61、什么是undo log?
(tips:在MySQL中由redo log 来产生undo段)
62、什么是redo log?
63、什么是checkpoint?它有什么作用?
64、什么是意向锁?有什么作用?
65、通过什么方法来解决幻读?
66、什么是两阶段锁定(2PL)?有什么作用?
67、什么是 group commit ?解决了什么问题?
68、使用group by的SQL语句,如果不适用聚集函数,可能会有什么问题?怎么解决?
69、死锁检测采用什么算法?
(tips:深度优先搜索和基于栈的递归方式)
70、常用的解决死锁的方法有哪些?
71、innodb_thread_concurrency参数值有什么作用?
72、逻辑执行计划和物理执行计划有什么区别和联系?
73、执行一个select需要每次都产生执行计划吗?如果不需要,执行计划保存在哪里?
74、连接池和线程池的区别?
75、什么是堆表,什么是索引表?
76、简单描述下semi-replication,以及可能存在的问题?
77、简单描述下MVCC中的写写互斥?
78、什么是WAL,有哪些作用?
79、使用 alter table 创建索引时,对数据库表加锁吗?加哪种类型的锁?
80、master-slave 模型中 同步模式有哪几种?
81、master-slave 模式中 semi-sync ?
82、什么是XA事务?
83、什么是内部XA事务?
84、使用XA事务时,对数据库隔离级别有没有要求?
85、binlog 和 redolog 采用什么方法来保证数据一致性?
(tips:2PC)
86、在XA事务中,Resource Manger这个角色由谁来担任?Transaction Manager这个角色由谁来担任?
87、sync_binlog 参数表示什么意思?
88、数据库crash recovery时,以binlog为准呢,还是以redo log为准?
(tips:binlog是server层的概念,redo log是InnoDB引擎层的概念,
redo log的存在是为了保证事务的正常执行,SQL语句执行时,先写
内存中的redo log记录,更改事务状态为parpare,然后写binlog记录,
然后执行器调用提交事务接口,将redo log状态改为commit,这里引申出了
group commit优化)
89、MySQL中的表名是大小写敏感的吗?
90、MySQL中的select语句判断 字符列 时 大小写敏感吗?
91、分库分表时,secondary index有哪些需要注意的内容?
92、MySQL是怎么避免客户端命令行中的密码在网络中明文传输的?
(tips:服务器发送所谓的挑战码用来加密客户端命令行中的密码)
93、replace into 命令的语义?
94、MySQL中的partition和常用的分表有什么区别和联系?
95、MySQL中 count(*) count(1) count(id) 列有什么区别?
96、什么是 Query Cache?有什么作用?
(tips:query cache用来缓存select 查询语句和对应的结果
这样,在下次执行统一语句时,就可以避免再走解释,优化等逻辑,
但是由于和查询语句强相关,这也导致query cache的作用不大,除非
执行的语句基本一致。MySQL8.0 版本已经去掉了Query Cache功能,
这样每一条SQL语句在执行时都需要走解析,优化等等的逻辑)
97、如果有身份证号和其他业务字段存在,是使用身份证号做主键呢,还是
采用自增主键?
(tips:建议使用自增主键,这样主键索引和二级索引占用的空间都比较小
性能较高)
98、MySQL中B+树的分叉数目一般是多少?可以动态调整吗?
(tips:目前看来直接调整是不可以的,但是可以通过缩小key大小、
调整page大小来间接的达到调整叉数的目的)
99、MySQL中的异步IO读写依靠什么实现?
(tips:依赖于libaio,但不是所有的IO操作都依靠异步,一般只用于read-ahead和write data file pages场景)
100、MySQL show profile, show profile cpu for query 1 查看具体SQL性能数据
101、sharding 和 partition的区别,sharding是为了解决单机存储空间不够而对数据进行物理划分,
而partition是一种逻辑划分,partition中可以有sharding,sharding中也可以有partition