MySQL手册版本 5.0.20-MySQL优化(四) (1)(5)

通常地,应该保存所有的冗余数据(在数据库原理中叫做"第三范式")。然而,为了能取得更高的效率复制一些信息或者创建摘要表也是划算的。

存储过程或者 UDFs(用户定义函数) 的方式在执行一些任务时可能性能更高。尽管如此,当数据库不支持这些特性时,还是有其他的替代方法可以达到目的,即使它们有点慢。

可以从查询缓存或应答中取得结果,然后将很多次的插入及更新操作放在一起做。如果数据库支持表锁(如MySQL和ORACLE),那么这就可以确保索引缓存在所有的更新操作之后只需要刷新一次。

当不需要直到数据什么时候写入表中时,可以用 INSERT DELAYED。这就会提高速度,因为多条记录同时在一起做一次磁盘写入操作。

当想让 SELECT 语句的优先级比插入操作还高时,用 INSERT LOW_PRIORITY。

用 SELECT HIGH_PRIORITY 来使检索记录跳过队列,也就是说即使有其他客户端正要写入数据,也会先让 SELECT 执行完。

在一条 INSERT 语句中采用多重记录插入格式(很多数据库都支持)。

用 LOAD DATA INFILE 来导入大量数据,这比 INSERT 快。

用 AUTO_INCREMENT 字段来生成唯一值。

定期执行 OPTIMIZE TABLE 防止使用动态记录格式的 MyISAM 表产生碎片。详情请看"15.1.3 MyISAM Table Storage Formats"。

采用 HEAP 表,它可能会提高速度。详情请看"15.1.3 MyISAM Table Storage Formats"。

正常的WEB服务器配置中,图片文件最好以文件方式存储,只在数据库中保存文件的索引信息。这么做的原因是,通常情况下WEB服务器对于文件的缓存总是做的比数据库来得好,因此使用文件存储会让系统更容易变得更快。

时间: 2024-10-02 02:06:14

MySQL手册版本 5.0.20-MySQL优化(四) (1)(5)的相关文章

MySQL手册版本 5.0.20-MySQL同步(一)

mysql 6 MySQL 同步 同步功能在MySQL 3.23.15就开始引进了,它可以把一个MySQL服务器上的数据复制到另一个服务器上去.本章描述了MySQL的各种复制特性.介绍了同步的概念,如何设置同步服务器,以及可用服务器的参照.还提供了一系列的常见问题及其答案,疑难解答. "14.6 Replication Statements"中介绍了同步相关的SQL语句语法. 我们建议经常访问"http://www.mysql.com"经常阅读本章的最新内容.同步功

MySQL手册版本 5.0.20-MySQL优化(二)

mysql|优化 7.2.1 EXPLAIN 语法(得到SELECT 的相关信息) EXPLAIN tbl_name 或者: EXPLAIN SELECT select_options EXPLAIN 语句可以被当作 DESCRIBE 的同义词来用,也可以用来获取一个MySQL要执行的 SELECT 语句的相关信息. EXPLAIN tbl_name 语法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一样. 当在一个 SELECT 语句前使用关

MySQL手册版本 5.0.20-MySQL优化(一)

mysql|优化 7 MySQL 优化 数据库优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解才行.尽管对系统或应用系统的了解不多的情况下优化效果还不错,但是如果想优化的效果更好,那么就需要对它了解更多才行. 本章主要讲解了几种优化MySQL的方法,并且给出了例子.记着,总有各种办法能让系统运行的更快,当然了,这需要更多的努力. 7.1 优化概述 让系统运行得快得最重要因素是数据库基本的设计.并且还必须清楚您的系统要用来做什么,以及存在的瓶颈. 最常见的系统瓶颈有以下几种: 磁盘搜索.

MySQL手册版本 5.0.20-MySQL优化(三)

mysql|优化 7.2.2 估算查询性能 在大多数情况下,可以通过统计磁盘搜索次数来估算查询的性能.对小表来说,通常情况下只需要搜索一次磁盘就能找到对应的记录(因为索引可能已经缓存起来了).对大表来说,大致可以这么估算,它使用B树做索引,想要找到一条记录大概需要搜索的次数为:log(row_count) / log(index_block_length / 3 * 2 / (index_length + data_pointer_length)) + 1. 在MySQL中,一个索引块通常是10

MySQL手册版本 5.0.20-MySQL优化(四) (1)(4)

可以在锁表后,一起执行几个语句来加速 INSERT 操作: LOCK TABLES a WRITE; INSERT INTO a VALUES (1,23),(2,34),(4,33); INSERT INTO a VALUES (8,26),(6,29); UNLOCK TABLES; 这对性能提高的好处在于:直到所有的 INSERT 语句都完成之后,索引缓存一次性刷新到磁盘中.通常情况是,多有少次 INSERT 语句就会有多数次索引缓存刷新到磁盘中的开销.如果能在一个语句中一次性插入多个值的

MySQL手册版本 5.0.20-MySQL优化(二) (1)

7.2.1 EXPLAIN 语法(得到SELECT 的相关信息) EXPLAIN tbl_name 或者: EXPLAIN SELECT select_options EXPLAIN 语句可以被当作 DESCRIBE 的同义词来用,也可以用来获取一个MySQL要执行的 SELECT 语句的相关信息. EXPLAIN tbl_name 语法和 DESCRIBE tbl_name 或 SHOW COLUMNS FROM tbl_name 一样. 当在一个 SELECT 语句前使用关键字 EXPLAI

MySQL手册版本 5.0.20-MySQL优化(四) (1)(2)

想要提高 ORDER BY 的速度,首先要看MySQL能否使用索引而非额外的排序过程.如果不能使用索引,可以试着遵循以下策略: 增加 sort_buffer_size 的值. 增加 read_rnd_buffer_size 的值. 修改 tmpdir,让它指向一个有很多剩余空间的专用文件系统.如果使用MySQL 4.1或更新,这个选项允许有多个路径用循环的格式.各个路径之间在 Unix 上用冒号(':')分隔开来,在 Windows,NetWare以及OS/2 上用分号(';').可以利用这个特

MySQL手册版本 5.0.20-MySQL优化(四) (1)

7.2.9 MySQL 如何优化 ORDER BY 在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序. 尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE 子句中都被包括了.下列的几个查询都会使用索引来解决 ORDER BY 或 GROUP BY 部分: SELECT * FROM t1 ORDER BY key_part1,key_part

MySQL手册版本 5.0.20-MySQL优化(四) (1)(3)

7.2.12 加速 INSERT 插入一条记录花费的时间由以下几个因素决定,后面的数字大致表示影响的比例: 连接:(3) 发送查询给服务器:(2) 解析查询:(2) 插入记录:(1 x 记录大小) 插入索引:(1 x 索引数量) 关闭:(1) 这里并没有考虑初始化时打开数据表的开销,因为每次运行查询只会做这么一次. 如果是 B-tree 索引的话,随着索引数量的增加,插入记录的速度以 log N 的比例下降. 可以使用以下几种方法来提高插入速度: 如果要在同一个客户端在同一时间内插入很多记录,可