三十一、事务的例子 MyIASM表如何进行事务处理: mysql> LOCK TABLES trans READ, customer WRITE; mysql> select sum(value) from trans where customer_id=some_id; mysql> update customer set total_value=sum_from_previous_statement where customer_id=some_id; mysql> UNLOCK TABLES; BDB表如何进行事务: mysql> BEGIN WORK; mysql> select sum(value) from trans where customer_id=some_id; ...
二十一、MySQL表高速缓存工作原理 每个MyISAM表的打开实例(instance)使用一个索引文件和一个数据文件。如果表被两个线程使用或在同一条查询中使用两次,MyIASM将共享索引文件而是打开数据文件的另一个实例。 如果所有在高速缓存中的表都在使用,缓存将临时增加到比表缓存尺寸大些。如果是这样,下一个被释放的表将被关闭。 你可以通过检查mysqld的Opened_tables变量以检查表缓存是否太小。如果该值太高,你应该增大表高速...
十六、MySQL如何次存储数据 数据库以目录存储。 表以文件存储。 列以变长或定长格式存储在文件中。对BDB表,数据以页面形式存储。 支持基于内存的表。 数据库和表可在不同的磁盘上用符号连接起来。 在Windows上,MySQL支持用.sym文件内部符号连接数据库。 十七、MySQL表类型 HEAP表:固定行长的表,只存储在内存中并用HASH索引进行索引。 ISAM表:MySQL 3.22中的早期B-tree表格式。 MyIASM:IASM...
十一、维护 如果可能,偶尔运行一下OPTIMIZE table,这对大量更新的变长行非常重要。 偶尔用myisamchk -a更新一下表中的键码分布统计。记住在做之前关掉MySQL。 如果有碎片文件,可能值得将所有文件复制到另一个磁盘上,清除原来的磁盘并拷回文件。 如果遇到问题,用myisamchk或CHECK table检查表。 用mysqladmin -i10 precesslist extended-status监控MySQL的状态。 用MySQL GUI客户程序,你可以在不同的窗口内...
在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序。尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE 子句中都被包括了。 使用索引的MySQL Order By 下列的几个查询都会使用索引来解决 ORDER BY 或 GROUP BY 部分:SELECT * FROM t1 ORDER BY key_part1,key_part2,... ;SELECT * FROM t1 WHERE key_part1=...
六、优化应用 应该集中精力解决问题。 在编写应用时,应该决定什么是最重要的: 速度 操作系统间的可移植性 SQL服务器间的可移植性 使用持续的连接。. 缓存应用中的数据以减少SQL服务器的负载。 不要查询应用中不需要的列。 不要使用SELECT * FROM table_name... 测试应用的所有部分,但将大部分精力放在在可能最坏的合理的负载下的测试整体应用。通过以一种模块化的方式进行,你应该能用一个快速“...
一、我们可以且应该优化什么? 硬件 操作系统/软件库 SQL服务器(设置和查询) 应用编程接口(API) 应用程序 二、优化硬件 如果你需要庞大的数据库表(>2G),你应该考虑使用64位的硬件结构,像Alpha、Sparc或即将推出的IA64。因为MySQL内部使用大量64位的整数,64位的CPU将提供更好的性能。 对大数据库,优化的次序一般是RAM、快速硬盘、CPU能力。 更多的内存通过将最常用的键码页面存放在内存中可...
二十六、如何知晓MySQL解决一条查询 运行项列命令并试图弄明白其输出: SHOW VARIABLES; SHOW COLUMNS FROM ...G EXPLAIN SELECT ...G FLUSH STATUS; SELECT ...; SHOW STATUS; 二十七、MySQL非常不错 日志 在进行很多连接时,连接非常快。 同时使用SELECT和INSERT的场合。 在不把更新与耗时太长的选择结合时。 在大多数选择/更新使用唯一键码时。 在使用没有长时间冲突锁定的多个表...
据说这是高手优化的MySQL,供大家参考,其中连接数: max_connections=1500可以根据服务器的性能更改. #set-variable=connect_timeout=5#set-variable=wait_timeout=5 建议启用,负担重的服务器可以适当减少持续连接时间 [mysqld] basedir=D:/mysql #bind-address=ip datadir=D:/mysql/data #language=D:/mysql/share/yourlanguagedirectory #slowquerylog#= #tmpdir#= #port=3306 set-variable=max_co...
碰到过好几次这样的题目,可每次都不能答的完全正确.现在大概列出如下:(忘各位补充)1.数据库的设计尽量把数据库设计的更小的占磁盘空间.1).尽可能使用更小的整数类型.(mediumint就比int更合适).2).尽可能的定义字段为not null,除非这个字段需要null.3).如果没有用到变长字段的话比如varchar,那就采用固定大小的纪录格式比如char.4).表的主索引应该尽可能的短.这样的话每条纪录都有名字标志且更高效.5).只创建确实需要的索引。索引有...
据说这是高手优化的mysql,供大家参考,其中连接数: max_connections=1500可以根据服务器的性能更改. #set-variable = connect_timeout=5 #set-variable = wait_timeout=5 建议启用,负担重的服务器可以适当减少持续连接时间 [mysqld] basedir=D:/mysql #bind-address=ip datadir=D:/mysql/data #language=D:/mysql/share/your language directory #slow query log#= #tmpdir#= #port=3306 set-variable = max_connections=1500 skip-...
(1)、max_connections: 允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 too many connections 错误。 默认数值是100,我把它改为1024 。 (2)、record_buffer: 每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128k),我把它改为16773120 (16m) (3)、key_buffer_size: 索引块是缓...
索引用来快速地寻找那有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。 假设我们创建了一个名为people的表...
数据库优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解才行。尽管对系统或应用系统的了解不多的情况下优化效果还不错,但是如果想优化的效果更好,那么就需要对它了解更多才行。 本章主要讲解了几种优化MySQL的方法,并且给出了例子。记着,总有各种办法能让系统运行的更快,当然了,这需要更多的努力。 1 优化概述 让系统运行得快得最重要因素是数据库基本的设计。并且还必须清楚您的系统要用来做什么,以及...
我们在前面已经简单介绍了一些MYSQL数据库的基本操作,这一章我们将针对MYSQL数据库管理员详细介绍下MYSQL数据库的优化问题。 1 优化MySQL服务器 1.1 MYSQL服务器系统变量 我们在前面的章节中曾经讲到过MYSQL服务器的一些基本管理,这里我们再对MYSQL服务器的服务器变量和状态变量做个简单介绍。 查询MYSQL服务器系统变量: C:/Program Files/MySQL/MySQL Server 5.0/bin> mysqld --verbose –help通过mysqladmin命令来查询MYSQL服...