1.如何优化MySQL
借一个场景来讲, 点赞功能, 见Java面试题—拾遗
结合自己是如何设计后台数据库, 以及优化查询的来讲
2. 什么情况下设置了索引但无法使用
这需要从索引的原理来解释, 不同的原理, 决定了有的操作可以作, 有的不可以做
如对姓名建立索引, 姓名之间的大小按字符串大小比较, 在这种排序树中, 并不适合做模糊匹配操作, 如何要想加快模糊匹配的操作, 可能需要其它的数据结构, 如该字符串大小排序的一个数组。
网上好像说可以做特定的模糊查询, 如
B-Tree索引可以被用在像=,>,>=,<,<=和BETWEEN这些比较操作符上。而且还可以用于LIKE操作符,只要它的查询条件是一个不以通配符开头的常量
至于能不能, 以及效率问题, 需要考察该操作在该数据结构中能不能有效的执行, 如Like操作在B-Tree上的执行。
同时, 还可以提一提Hash索引,以及Hash索引不能做的操作。
Hash 索引理想情况下, 可使得查找效率达到O(1)
Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。
B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大,在有大量重复键值情况下,哈希索引的效率也是极低的,因为存在所谓的哈希碰撞问题。
4. 索引的底层实现原理和优化
见博客文章
5. 数据库范式
因为太形式与理论化了, 只了解以下这句话就行
范式就是一张数据表的表结构所符合的某种设计标准的级别
7. 数据库怎么做优化
当问到某某怎么做优化的问题时, 首先要知道某某执行所涉及哪些过程, 然后才可以有条有理的去说
8. 什么是数据库链接, 多客户端可以共享一个数据库链接吗?
数据库链接就是一个Socket,
链接池应该在客户端
将数据库当做一个应用服务器的话, 其实就是多线程并发访问数据库的问题,
当客户端每个线程都有一个链接时, 对于数据库服务端来说, 要处理多客户端的并发访问
当客户端所有线程共享一个链接时, 就不需要处理多客户端的并发访问, 因为此时只有一个Socket
但这样, 多线程共享一个链接时, 要对链接进行加锁操作, 否则返回的查询结果是混乱的, 链接是一种资源, 多个线程去争用这种资源。
与应用服务器不同的是, 对于应用服务器, 客户端我们无法控制, 而对于数据库服务器, 客户端就可以看作是应用服务器, 所以可以对客户端的数量进行控制.
使用数据库链接的良好实践是
- 使用链接池, 每次使用链接时从链接池取得
- always acquire and close the connection, statement and resultset in the shortest possible scope.
netty-chat中, 共用了一个链接, 但没有做多线程的并发控制, 所以是错的。
Is it safe to use a static java.sql.Connection instance in a multithreaded system?
11. 一致性与原子性, 隔离性的关系
https://www.zhihu.com/question/30272728
原子一致性与并发一致性