没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
31页
SQL优化 3 数据库优化 6 DB&SQL优化 7 索引 8 分库分表分区 8 数据库引擎 9 预处理 9 mysql like查询 9 读写分离 9 MySQL事物 9 一、事务定义 9 二、转账操作理解事务 9 三、事务四大特征(ACID) 10 四、关于事务的一些术语 10 五、和事务相关的两条重要的SQL语句(TCL) 10 六、事务开启的标志?事务结束的标志? 10 七、事物与数据库底层数据 10 八、在MySQL中,事务提交与回滚 10 九、事务四大特性之一隔离性(isolation) 11 十、隔离级别与一致性关系 12 十一、设置事务隔离级别 12 十二、隔离级别的作用范围 12 十三、查看隔离级别 12 DB索引 13 MySQL索引的类型 13 索引原理 13 Mysql索引管理 14 索引的两大类型hash与btree比较 15 索引原则 15 索引无法命中 15 慢查询 16 DB锁 17 乐观锁悲观锁 17 JVM内存结构 19 内存结构 19 Java堆 20 JVM GC过程 20 GC执行机制(回收器) 21 JVM判断对象是否可以被回收算法等等。
资源推荐
资源详情
资源评论
more
DB&JVM
资料
1
目录
SQL 优化 .................................................................................................................................................................................................................... 3
数据库优化 ............................................................................................................................................................................................................... 6
DB&SQL 优化 ............................................................................................................................................................................................................ 7
索引 ................................................................................................................................................................................................................... 8
分库分表分区 ................................................................................................................................................................................................... 8
数据库引擎 ....................................................................................................................................................................................................... 9
预处理 ............................................................................................................................................................................................................... 9
mysql like 查询 ................................................................................................................................................................................................ 9
读写分离 ........................................................................................................................................................................................................... 9
MySQL 事物 ............................................................................................................................................................................................................... 9
一、事务定义 ................................................................................................................................................................................................... 9
二、转账操作理解事务 ................................................................................................................................................................................... 9
三、事务四大特征(ACID) ............................................................................................................................................................................... 10
四、关于事务的一些术语 ............................................................................................................................................................................. 10
五、和事务相关的两条重要的 SQL 语句(TCL).............................................................................................................................................. 10
六、事务开启的标志?事务结束的标志? .................................................................................................................................................. 10
七、事物与数据库底层数据 ......................................................................................................................................................................... 10
八、在 MySQL 中,事务提交与回滚 ............................................................................................................................................................ 10
九、事务四大特性之一隔离性(isolation) ..................................................................................................................................................... 11
十、隔离级别与一致性关系 ......................................................................................................................................................................... 12
十一、设置事务隔离级别 ............................................................................................................................................................................. 12
十二、隔离级别的作用范围 ......................................................................................................................................................................... 12
十三、查看隔离级别 ..................................................................................................................................................................................... 12
DB 索引 ................................................................................................................................................................................................................... 13
MySQL 索引的类型 ......................................................................................................................................................................................... 13
索引原理 ......................................................................................................................................................................................................... 13
Mysql 索引管理 .............................................................................................................................................................................................. 14
索引的两大类型 hash 与 btree 比较 ............................................................................................................................................................. 15
索引原则 ......................................................................................................................................................................................................... 15
索引无法命中 ................................................................................................................................................................................................. 15
慢查询 ............................................................................................................................................................................................................. 16
DB 锁 ....................................................................................................................................................................................................................... 17
乐观锁悲观锁 ......................................................................................................................................................................................................... 17
JVM 内存结构 ......................................................................................................................................................................................................... 19
内存结构 ......................................................................................................................................................................................................... 19
Java 堆 ............................................................................................................................................................................................................. 20
JVM GC 过程 ........................................................................................................................................................................................................... 20
GC 执行机制(回收器) ........................................................................................................................................................................................ 21
JVM 判断对象是否可以被回收算法 ...................................................................................................................................................................... 22
1.1 引用计数法 .............................................................................................................................................................................................. 22
1.2 根搜索算法 .............................................................................................................................................................................................. 22
回收算法 ................................................................................................................................................................................................................. 22
标记-清除算法(Mark-Sweep) .................................................................................................................................................................... 22
复制算法(Copying) .................................................................................................................................................................................... 23
标记-整理算法(Mark-Compact) ................................................................................................................................................................ 23
2
分代回收算法(Generational Collecting) .................................................................................................................................................... 23
什么时候触发 Major GC(主要/重要的)呢? ................................................................................................................................................. 24
JVM 问题&优化 ...................................................................................................................................................................................................... 24
JVM 发生 OOM 情况.............................................................................................................................................................................................. 26
JVM 优化 ................................................................................................................................................................................................................. 27
堆大小设置 ..................................................................................................................................................................................................... 27
回收器选择 ..................................................................................................................................................................................................... 27
吞吐量优先的并行收集器...................................................................................................................................................................... 27
响应时间优先的并发收集器 .................................................................................................................................................................. 28
辅助信息 ......................................................................................................................................................................................................... 28
常见配置汇总 ................................................................................................................................................................................................. 29
调优总结 ......................................................................................................................................................................................................... 29
3
SQL 优化
$r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");
上面两条 SQL 语句的差别就是 CURDATE() ,MySQL 的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此
类的 SQL 函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替 MySQL 的函数,
从而开启缓存。
2. EXPLAIN 你的 SELECT 查询
使用 EXPLAIN 关键字可以让你知道 MySQL 是如何处理你的 SQL 语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。
EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序的……等等,等等。
3. 当只要一行数据时使用 LIMIT 1
当你查询表的有些时候,你已经知道结果只会有一条结果,但因为你可能需要去 fetch 游标,或是你也许会去检查返回的记录数。
在这种情况下,加上 LIMIT 1 可以增加性能。这样一样,MySQL 数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一
条符合记录的数据。
下面的示例,只是为了找一下是否有“中国”的用户,很明显,后面的会比前面的更有效率。(请注意,第一条中是 Select *,第二条
是 Select 1)
// 没有效率的:
$r = mysql_query("SELECT * FROM user WHERE country = 'China'");
if (mysql_num_rows($r) > 0) {
// ...
}
// 有效率的:
$r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1");
if (mysql_num_rows($r) > 0) {
// ...
}
4. 为搜索字段建索引
参考 Java 面试准备十五:数据库——索引
5. 在 Join 表的时候使用相当类型的例,并将其索引
如果你的应用程序有很多 JOIN 查询,你应该确认两个表中 Join 的字段是被建过索引的。这样,MySQL 内部会启动为你优化 Join 的 SQL
语句的机制。
而且,这些被用来 Join 的字段,应该是相同的类型的。例如:如果你要把 DECIMAL 字段和一个 INT 字段 Join 在一起,MySQL 就无法
使用它们的索引。对于那些 STRING 类型,还需要有相同的字符集才行。(两个表的字符集有可能不一样)
6. 千万不要 ORDER BY RAND()
如果你真的想把返回的数据行打乱了,你有 N 种方法可以达到这个目的。这样使用只会让你的数据库的性能呈指数级的下降。这里的
问题是:MySQL 会不得不去执行 RAND()函数(很耗 CPU 时间),而且这是为了每一行记录去记行,然后再对其进行排序。就算你用
了 limit 1 也无济于事(因为要排序)
下面的示例是随机挑一条记录
-- 千万不要这样做
SELECT last_name FROM actor ORDER BY RAND() LIMIT 1;-- 时间: 0.252s
-- 这样会更好
SELECT COUNT(*) FROM actor;
-- 然后在程序代码里,返回 0~count(*)-1 的一个随机数 rand,再通过以下 sql 去查表
SELECT last_name FROM actor limit rand, 1;
7. 避免 SELECT *
从数据库里面读出的数据越多,查询速度越慢
4
如果数据库拂去其和 WEB 服务器是两台独立的机器时,还会增加网络传输的负载
所以,你应该养成需要什么数据取什么数据的习惯。
8. 永远为每张表设置一个主键
我们应该为数据库里的每张表都设置一个 ID 作为其主键,而且最好是一个 INT 型的(推荐使用 UNSIGN),并设置上自动增加的
AUTO_INCREMENT 标志。
就算是你 users 表有一个主键叫“email”的字段,你也别让他成为主键。使用 VARCHAR 类型来当主键会使得性能下降。另外,在
你的程序中,你应该使用表的主键来构造你的数据机构。
而且,在 MySQL 数据引擎下,还有一些操作需要使用主键,在这些情况下,主键的性能和设置变得非常重要,比如,集群,分
区….(不懂这个。。)
在这里,只有一个情况是例外,那就是“关联表”的“外键”,也就是说,这个表的主键,通过若干个别的表的主键构成。我们
把这个情况叫做“外键”。比如,有个“学生表”有学生的 ID,有个“课程表”有课程 ID,那么“成绩表”就是“关联表”,其关联了学
生表和课程表,在成绩表中,学生 ID 和课程 ID 叫“外键”其共同组成主键。
9. 使用 ENUM 而不是 VARCHAR
ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来 ,用这个字段来做一些选
项列表变得相当的完美。
如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你
应该使用 ENUM 而不是 VARCHAR。
MySQL 也有一个“建议”(见第十条)告诉你怎么去重新组织你的表结构。当你有一个 VARCHAR 字段时,这个建议会告诉你把
其改成 ENUM 类型。使用 PROCEDURE ANALYSE() 你可以得到相关的建议。
10. 从 PROCEDURE ANALYSE() 取得建议
PROCEDURE ANALYSE() 会让 MySQL 帮你去分析你的字段和其实际的数据,并会给你一些有用的建议。只有表中有实际的数据,
这些建议才会变得有用,因为要做一些大的决定是需要有数据作为基础的。
例如,如果你创建了一个 INT 字段作为你的主键,然而并没有太多的数据,那么,PROCEDURE ANALYSE()会建议你把这个字段的
类型改成 MEDIUMINT 。或是你使用了一个 VARCHAR 字段,因为数据不多,你可能会得到一个让你把它改成 ENUM 的建议。这些建
议,都是可能因为数据不够多,所以决策做得就不够准。
一定要注意,这些只是建议,只有当你的表里的数据越来越多时,这些建议才会变得准确。一定要记住,你才是最终做决定的人。
11. 尽可能的使用 NOT NULL
除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。
首先,问问你自己“Empty”和“NULL”有多大的区别(如果是 INT,那就是 0 和 NULL)?如果你觉得它们之间没有什么区别,那么
你就不要使用 NULL。(你知道吗?在 Oracle 里,NULL 和 Empty 的字符串是一样的!)
不要以为 NULL 不需要空间,其需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就
不能使用 NULL 了,现实情况是很复杂的,依然会有些情况下,你需要使用 NULL 值。
12. PreparedStatement
PreparedStatement 很像存储过程,是一种运行在后台的 SQL 语句集合,我们可以使用 PreparedStatement 获得很多好处,无论是
性能问题还是安全问题。
PreparedStatement 可以检查一些你绑定好的变量,这样可以保护你的程序不会受到“SQL 注入式”攻击。当然,你也可以手动去
检查你的这些变量,然而,手动的检查容易出问题,而且很经常会被程序员忘了。当我们使用一些 framework 或是 ORM 的时候,这样
的问题会好一些。
在性能方面,当一个相同的查询被使用很多次的时候,这会为你带来可观的性能优势,你可以给这些 PreparedStatement 定义一
些参数,而 MySQL 只会解析一次。
13. 无缓冲的查询
正常情况下,当你在你的脚本中执行一个 SQL 语句的时候,你的程序会停在那里直到这个 SQL 语句返回,然后你的程序再往下继
续执行。你可以使用无缓冲查询来改变这个行为。尤其是那些会产生大量结果的查询语句,并且,你不需要等到所有第的结果都返回,
只需要第一行的数据返回的时候,你就可以马上开始工作于查询结果了。
14. 把 IP 地址存成 UNSIGNED INT
剩余30页未读,继续阅读
资源评论
南巷Dong
- 粉丝: 3372
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功