[转] MySql 优化 大数目优化

一样、我们得以还相应优化什么?

硬件

操作系统/软件库

SQL服务器(设置和询问)

采取编程接口(API)

应用程序


其次、优化硬件

倘您得巨大的多寡库表(>2G),你应该考虑下64各类之硬件结构,像Alpha、Sparc或将推出的IA64。因为MySQL内部采用大量64个的整数,64个之CPU将提供更好的特性。

针对异常数据库,优化的先后一般是RAM、快速硬盘、CPU能力。

再多的内存通过以尽常用之键码页面存放在内存中可以加快键码的创新。

如果不下工作安全(transaction-safe)的表或有大表并且想避免免长文件检查,一光UPS就可知当电源故障时受系统安全关闭。

对数据库存放于一个专用服务器的体系,应该考虑1G底盖太网。延迟与吞吐量同样举足轻重。


老三、优化磁盘

也系统、程序与临时文件配备一个专用磁盘,如果确是进展过多改动工作,将更新日志与业务日志放在专用磁盘上。
低寻道时间对数据库磁盘非常重要。对与大表,你可以估计您用待log(行数)/log(索引块长度/3*2/(键码长度

  • 多少指针长度))+1破寻到才能够找到一行。对于发出500000推行之表,索引Mediun
    int类型的排,需要log(500000) / log(1024/3*2/(3 +
    2))+1=4不良寻道。上述索引需要500000*7*3/2=5.2M的长空。实际上,大多数片用给缓存,所以大概只有待1-2软寻道。
    然而对于写入(如达到),你将需4浅寻道请求来找到在哪里存放新键码,而且一般如果2糟寻道来更新索引并形容副一行。
    对于生特别之数据库,你的行使将备受磁盘寻道速度的限制,随着数据量的增加呈N
    log N数据级递增。
    将数据库暨表分在不同之磁盘上。在MySQL中,你得呢者要利用标志链接。
    条列磁盘(RAID 0)将提高读与描写的吞吐量。 带镜像的条列(RAID
    0+1)将再度安全并提高读取的吞吐量。写副的吞吐量将装有下跌。
    不要对临时文件或可死轻地重建的数码所在的磁盘使用镜像或RAID(除了RAID
    0)。 在Linux上,在带时对磁盘使用命令hdparm -m16
    -d1因为启用同时读写多单扇区和DMA功能。这可用应时间增长5~50%。
    在Linux上,用async (默认)和noatime挂载磁盘(mount)。
    对于某些特定应用,可以对一些特定表使用内存磁盘,但常见不待。

季、优化操作系统

永不交换区。如果内存不足,增加又多之内存还是部署你的系统使用于少内存。
不要采用NFS磁盘(会起NFS锁定的题材)。
增加系统及MySQL服务器的打开文件数量。(在safe_mysqld脚本中加入ulimit -n
#)。 增加系统的长河同线程数量。
如果你发相对较少之大表,告诉文件系统不要将文件打碎在不同的磁道上(Solaris)。
使用支持大文件之文件系统(Solaris)。
选择采取啊种文件系统。在Linux上之Reiserfs对于打开、读写都怪急匆匆。文件检查才待几秒种。


五、选择下编程接口

PERL 可当不同之操作系统及数据库里移植。 适宜快速原型。
应该以DBI/DBD接口。 PHP 比PERL易学。 使用比PERL少之资源。
通过提升到PHP4可以落重新快之速度。 C MySQL的原生接口。
较快并致更多之主宰。 低层,所以要提交再多。 C++
较高层次,给您还多之日子来修应用。 仍在支付中 ODBC
运行于Windows和Unix上。 几乎可当不同的SQL服务器间移植。
较迟缓。MyODBC只是简约的畅通驱动程序,比用原生接口慢19%。
有过多主意做同样的从。很不便像许多ODBC驱动程序那样运行,在不同的世界还有不同之缪。
问题成堆。Microsoft偶尔还见面改变接口。
不明朗的未来。(Microsoft更推崇OLE而非ODBC) ODBC 运行在Windows和Unix上。
几乎可于不同的SQL服务器中移植。
较迟缓。MyODBC只是略的通行驱动程序,比用原生接口慢19%。
有成千上万办法做同的从。很为难像许多ODBC驱动程序那样运行,在不同之世界还有不同的错误。
问题成堆。Microsoft偶尔还会变动接口。
不明朗的前程。(Microsoft更推崇OLE而非ODBC) JDBC
理论及而在不同的操作系统何时准库间移植。 可以运作于web客户端。
Python和其余 可能对,可我们决不其。


六、优化利用

应该集中精力解决问题。 在编辑应用时,应该控制什么是无比重大之: 速度
操作系统中的可移植性 SQL服务器间的可移植性 使用持续的接连。.
缓存应用被的数量因减掉SQL服务器的负载。 不要查询利用被莫待之排。
不要用SELECT * FROM table_name…
测试用之持有片,但以多数生机在在或无限深的合理的载重下之测试整体应用。通过以同种模块化的方式展开,你应该力所能及就此一个高速“哑模块”替代找到的瓶颈,然后非常爱地标明出下一个瓶颈。
如果以一个批处理着开展大量改,使用LOCK
TABLES。例如将多单UPDATES或DELETES集中在共。


七、应该采取可移栽的利用

Perl DBI/DBD ODBC JDBC Python(或另产生大SQL接口的语言)
你应该一味下是被有目的SQL服务器被还是可死爱地用外组织模拟的SQL构造。www.mysql.com上之Crash-me页可以助而。
为操作系统/SQL服务器编写包装程序来供缺少的效应。


八、如果你要再快之快慢,你当:

摸来瓶颈(CPU、磁盘、内存、SQL服务器、操作系统、API或动)并集中全力解决。
使用与你重新快速度/灵活性的扩大。
逐渐了解SQL服务器以便能也汝的题目用或最抢之SQL构造并避免瓶颈。
优化表布局和询问。 使用复制以获重新快之选项(select)速度。
如果您有一个慢速的网络连接数据库,使用压缩客户/服务器协议。
不要怕时采取之首先个本子不克全面地移植,在公解决问题常常,你总是好以其后优化其。


九、优化MySQL

慎选编译器和编译选项。 位你的体系查找最好之启航选项。
通读MySQL参考手册并阅读Paul DuBios的《MySQL》一修。(已生中文版-译注)
多用EXPLAIN SELECT、SHOW VARIABLES、SHOW STATUS和SHOW PROCESSLIST。
了解查询优化器的做事规律。 优化表的格式。 维护您的表(myisamchk、CHECK
TABLE、 OPTIMIZE TABLE) 使用MySQL的恢弘功能为吃所有快速到位。
如果您注意到了而用于成千上万场子用一些函数,编写MySQL UDF函数。
不要使表级或列级的GRANT,除非您真的要。
购买MySQL技术支持以帮助你解决问题憨笑


十、编译和安MySQL

经各项而的网选择或不过好的编译器,你习以为常可以取得10-30%底性提高。
在Linux/Intel平台上,用pgcc(gcc的驰骋芯片优化版)编译MySQL。然而,二向前制代码将不得不运行在Intel奔腾CPU上。
对于同一种植特定的平台,使用MySQL参考手册上引进的优化增选项。
一般地,对一定CPU的原生编译器(如Sparc的Sun
Workshop)应该比gcc提供更好的习性,但未总是这么。
用你拿使用的字符集编译MySQL。
静态编译生成mysqld的实施文书(用–with-mysqld-ldflags=all-static)并因而strip
sql/mysqld整理最终的实践文书。
注意,既然MySQL不动C++扩展,不带来扩展支持编译MySQL将抱巨大的性质提高。
如果操作系统支持原生线程,使用原生线程(而不用mit-pthreads)。
用MySQL基准测试来测试最终之次向前制代码。


十一、维护

比方可能,偶尔运行一下OPTIMIZE table,这对大气更新的变长行非常重要。
偶尔用myisamchk -a更新一下表中的键码分布统计。记住在开事先关闭MySQL。
如果生细碎文件,可能值得以持有文件复制到另外一个磁盘上,清除原来的磁盘并拷回文件。
如果遇上题目,用myisamchk或CHECK table检查表。 用mysqladmin -i10
precesslist extended-status监控MySQL的状态。 用MySQL
GUI客户程序,你可以在不同的窗口外监控进程列表和状态。 使用mysqladmin
debug获得有关锁定和性能的信息。


十二、优化SQL

扬SQL之丰富,其它事情到由运用去做。使用SQL服务器来举行:

探寻来因WHERE子句的执行。 JOIN表 GROUP BY ORDER BY DISTINCT

毫不动SQL来举行:

检数据(如日期) 成为同单纯计算器

技巧:

神地以键码。 键码适合搜索,但不适合索引列的插入/更新。
保持数据为数据库第三范式,但绝不操心冗余信息或者及时只要您得再快之进度,创建总结表。
在大表上无开GROUP BY,相反创建大表的下结论表并查询其。 UPDATE table set
count=count+1 where key_column=constant非常抢。
对于大表,或许最好偶尔生成总结表而休是直接保持总表。
充分利用INSERT的默认值。


十三、不同SQL服务器的快差别(以秒计)

+————————–+——–+———+ |通过键码读取2000000实施:
| NT | Linux | +————————–+——–+———+ |mysql |
367 | 249 | +————————–+——–+———+ |mysql_odbc
| 464 | | +————————–+——–+———+  |db2_odbc |
1206 | | +————————–+——–+———+ 
|informix_odbc | 121126 | |
+————————–+——–+———+  |ms-sql_odbc   |
1634 | | +————————–+——–+———+ |oracle_odbc |
20800 | | +————————–+——–+———+  |solid_odbc
| 877   | | +————————–+——–+———+
|sybase_odbc | 17614 | |
+————————–+——–+———+ 

+————————–+——–+———+  |插入350768行: | NT |
Linux | +————————–+——–+———+ |mysql | 381 |
206 | +————————–+——–+———+ |mysql_odbc | 619
  | | +————————–+——–+———+ |db2_odbc | 3460
 | | +————————–+——–+———+ |informix_odbc |
2692  | | +————————–+——–+———+ |ms-sql_odbc
| 4012  | | +————————–+——–+———+
|oracle_odbc | 11291 | |
+————————–+——–+———+  |solid_odbc | 1801
 | | +————————–+——–+———+ |sybase_odbc |
4802  | | +————————–+——–+———+

于上述测试中,MySQL配置8M高速缓存运行,其他数据库以默认安装运行。


十四、重要的MySQL启动选

back_log 如果急需大量新连,修改它。 thread_cache_size
如果要大量新连,修改它。 key_buffer_size 索引页池,可以要成稀十分。
bdb_cache_size BDB表使用的笔录以及键吗高速缓存。 table_cache
如果发生好多之表和并发连接,修改其。 delay_key_write
如果用缓存所有键码写入,设置它。 log_slow_queries
找有要花费大量岁月之询问。 max_heap_table_size 用于GROUP BY
sort_buffer 用于ORDER BY和GROUP BY myisam_sort_buffer_size
用于REPAIR TABLE join_buffer_size 在开展无键吗的联时利用。


十五、优化表

MySQL拥有相同仿丰富的路。你应该对各个一样列尝试采用最灵之档次。
ANALYSE过程可以帮忙你找到表的无限优类型:SELECT * FROM table_name
PROCEDURE ANALYSE()。 对于非保留NULL值的排下NOT
NULL,这对准而想索引的列尤其重要。 将ISAM类型的表改为MyISAM。
如果可能,用固定的表格式创建表。 不要索引你莫思就此之物。
利用MySQL能按一个索引的前缀进行询问的实。如果您产生索引INDEX(a,b),你不需要在a上之目。
不以长CHAR/VARCHAR列上创立索引,而只索引列的一个前方缀以节约存储空间。CREATE
TABLE table_name (hostname CHAR(255) not null, index(hostname(10)))
对每个表下最灵之表格式。
在不同表中保存相同信息的列应该有同样的概念并拥有同样之列名。


十六、MySQL如何破存储数据

数据库以目录存储。 表以文件存储。
列以变长或定长格式存储于文书中。对BDB表,数据以页面形式储存。
支持因内存的阐发。 数据库与表可在不同的磁盘上之所以符号连接起来。
在Windows上,MySQL支持用.sym文件里符号连接数据库。


十七、MySQL表类型

HEAP表:固定行长的阐发,只存储于内存中并因而HASH索引进行索引。 ISAM表:MySQL
3.22吃的初B-tree表格式。 MyIASM:IASM表的初本子,有如下扩展:
二前行制层次的可移植性。 NULL列索引。 对变长行比ISAM表有还少的碎片。
支持好文件。 更好之目压缩。 更好的键吗统计分布。
更好和重快之auto_increment处理。 来自Sleepcat的Berkeley
DB(BDB)表:事务安全(有BEGIN WORK/COMMIT|ROLLBACK)。


十八、MySQL行类型(专指IASM/MyIASM表)

一旦有列是定长格式(没有VARCHAR、BLOB或TEXT),MySQL将因定长表格式创建表,否则表以动态长度格式创建。
定长格式比动态长度格式快多并再安全。
动态长度行格式一般占比较少之仓储空间,但如若表频繁更新,会出碎片。
在某些情况下,不值得以享有VARCHAR、BLOB和TEXT列转移到外一个表中,只是获得主表上之又快速度。
利用myiasmchk(对ISAM,pack_iasm),可以创造只念压缩表,这要磁盘使用率最小,但运用慢速磁盘时,这生不易。压缩表充分地动将不再更新的日志表


十九、MySQL高速缓存(所有线程共享,一次性分配)

键码缓存:key_buffer_size,默认8M。 表缓存:table_cache,默认64。
线程缓存:thread_cache_size,默认0。
主机名缓存:可当编译时修改,默认128。 内存映射表:目前只有用于压缩表。
注意:MySQL没有运行高速缓存,而被操作系统处理。


二十、MySQL缓存区变量(非共享,按需要分配)

sort_buffer:ORDER BY/GROUP BY record_buffer:扫描表。
join_buffer_size:无键联结 myisam_sort_buffer_size:REPAIR TABLE
net_buffer_length:对于读SQL语句并缓存结果。
tmp_table_size:临时结果的HEAP表大小。


二十一、MySQL表高速缓存工作规律

每个MyISAM表的开辟实例(instance)使用一个目文件以及一个数据文件。如果表被简单单线程使用或者于平等条查询中以简单次等,MyIASM将联名享索引文件而是打开数据文件的任何一个实例。
如果持有在高速缓存中的表都在使,缓存将现增至比表缓存尺寸大些。如果是如此,下一个让放出的表将被关闭。
你得由此检查mysqld的Opened_tables变量以检查表缓存是否尽小。如果该值太胜,你该增大表高速缓存。


二十二、MySQL扩展/优化-提供再快之进度

运用优化的表类型(HEAP、MyIASM或BDB表)。 对数码运用优化的排列。
如果可能行使得长行。 使用不同之锁定类型(SELECT HIGH_PRIORITY,INSERT
LOW_PRIORITY) Auto_increment REPLACE (REPLACE INTO table_name VALUES
(…)) INSERT DELAYED LOAD DATA INFILE / LOAD_FILE()
使用多执INSERT一次等栽多行。 SELECT INTO OUTFILE LEFT JOIN, STRAIGHT
JOIN LEFT JOIN ,结合IS NULL ORDER BY可当好几情况下采取键码。
如果单独询问在一个索引中的排列,将只有以索引树解决查询。
联结一般比子查询快(对大多数SQL服务器也如此)。 LIMIT SELECT * from
table1 WHERE a > 10 LIMIT 10,20 DELETE * from table1 WHERE a > 10
LIMIT 10 foo IN (常数列表) 高度优化。 GET_LOCK()/RELEASE_LOCK() LOCK
TABLES INSERT和SELECT可同时运转。 UDF函数可装载上一个正值运行的服务器。
压缩只读表。 CREATE TEMPORARY TABLE CREATE TABLE .. SELECT
带RAID选项的MyIASM表将文件分割成多文书为突破某些文件系统的2G限制。
Delay_keys 复制功能


二十二、MySQL何时使用索引

本着一个键码使用>, >=, =, <, <=, IF NULL和BETWEEN SELECT *
FROM table_name WHERE key_part1=1 and key_part2 > 5; SELECT *
FROM table_name WHERE key_part1 IS NULL;

当用非因对接配符开始的LIKE SELECT * FROM table_name WHERE key_part1
LIKE ‘jani%’

以展开联时打旁一个表中提取行时 SELECT * from t1,t2 where
t1.col=t2.key_part

摸有指定索引的MAX()或MIN()值 SELECT MIN(key_part2),MAX(key_part2) FROM
table_name where key_part1=10

一个键码的前缀使用ORDER BY或GROUP BY SELECT * FROM foo ORDER BY
key_part1,key_part2,key_part3

以装有用在查询中的排是键码的一模一样片时刻 SELECT key_part3 FROM
table_name WHERE key_part1=1


二十三、MySQL何时无使索引

假设MySQL能估计起它以可能比较扫描整张表还要快时,则免使用索引。例如如果key_part1备匀分布在1暨100里面,下列查询中采用索引就非是甚好:
SELECT * FROM table_name where key_part1 > 1 and key_part1 <
90

比方应用HEAP表且不用=搜索所有键码部分。

于HEAP表上以ORDER BY。

如非是故键码第一有些 SELECT * FROM table_name WHERE key_part2=1

要运用以一个通配符开始之LIKE SELECT * FROM table_name WHERE
key_part1 LIKE ‘%jani%’

寻找一个目录而在外一个目上召开ORDER BY SELECT * from table_name WHERE
key_part1 = # ORDER BY key2


二十四、学会使用EXPLAIN

于各级一样长条你道太慢的询问使用EXPLAIN!

mysql> explain select t3.DateOfAction, t1.TransactionID -> from t1
join t2 join t3 -> where t2.ID = t1.TransactionID and t3.ID =
t2.GroupID -> order by t3.DateOfAction, t1.TransactionID;
+——-+——–+—————+———+———+——————+——+———————————+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+——-+——–+—————+———+———+——————+——+———————————+
| t1 | ALL | NULL | NULL | NULL | NULL | 11 | Using temporary; Using
filesort | | t2 | ref | ID | ID | 4 | t1.TransactionID | 13 | | | t3 |
eq_ref | PRIMARY | PRIMARY | 4 | t2.GroupID | 1 | |
+——-+——–+—————+———+———+——————+——+———————————+

ALL和界定类型提示一个私的问题。


二十五、学会用SHOW PROCESSLIST

行使SHOW processlist来发现正在举行呀:
+—-+——-+———–+—-+———+——+————–+————————————-+
| Id | User | Host | db | Command | Time | State | Info |
+—-+——-+———–+—-+———+——+————–+————————————-+
| 6 | monty | localhost | bp | Query | 15 | Sending data | select *
from station,station as s1 | | 8 | monty | localhost | | Query | 0 | |
show processlist |
+—-+——-+———–+—-+———+——+————–+————————————-+

在mysql或mysqladmin中因故KILL来杀死溜掉的线程。

二十六、如何知晓MySQL解决一漫长查询

运作项列命令并拟将明白该出口: SHOW VARIABLES; SHOW COLUMNS FROM
…\G EXPLAIN SELECT …\G FLUSH STATUS; SELECT …; SHOW STATUS;


二十七、MySQL非常不利

日志 在拓展过多老是时,连接老急匆匆。 同时以SELECT和INSERT的场地。
在非将创新和耗时太长的抉择组合时。 在大部选项/更新使用唯一键码时。
在采用没有增长时冲突锁定的大半只表时。
在为此大表时(MySQL使用一个分外紧凑的表格式)。


二十八、MySQL应避免的事体

为此删掉的行更新或插队入表,结合而耗时长之SELECT。
在会在WHERE子句被的列上用HAVING。 不以键码或键码不够唯一要进行JOIN。
在不同列类型的列上JOIN。 在匪动=匹配整个键码时利用HEAP表。
在MySQL监控程序中忘记在UPDATE或DELETE中采取相同漫长WHERE子句。如果想这么做,使用mysql客户程序的–i-am-a-dummy选项。


二十九、MySQL各种锁定

内部表锁定 LOCK TABLES(所有表类型适用) GET LOCK()/RELEASE LOCK()
页面锁定(对BDB表) ALTER TABLE也以BDB表上开展表锁定 LOCK
TABLES允许一个表有多单读者和一个写者。
一般WHERE锁定具有比READ锁定高之优先级以避免为写副方干等。对于未根本之抒写入方,可以运用LOW_PRIORITY关键字于锁定处理器优选读取方。
UPDATE LOW_PRIORITY SET value=10 WHERE id=10;


三十、给MySQL更多信息以重新好地解决问题的技能

注意你到底能去丢(加注)MySQL功能为使查询而移栽:

SELECT /*! SQL_BUFFER_RESULTS */ … SELECT SQL_BUFFER_RESULTS …
将劫持MySQL生成一个即结果集。只要持有临时结果集生成后,所有表上的锁定均给放飞。这会于遇到表锁定问题常常要么使费大丰富日子将结果传给客户端时有所帮助。
SELECT SQL_SMALL_RESULT … GROUP BY …
告诉优化器结果集将只有含很少的实行。 SELECT SQL_BIG_RESULT … GROUP BY
… 告诉优化器结果集将包含很多行。 SELECT STRAIGHT_JOIN …
强制优化器以起在FROM子句被的程序联结表。 SELECT … FROM table_name
[USE INDEX (index_list) | IGNORE INDEX (index_list)] table_name2
强制MySQL使用/忽略列有之目录。


三十一、事务之例证

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> update customer set
total_value=sum_from_previous_statement where customer_id=some_id;
mysql> COMMIT;

只顾你可透过下列语句回避事务: UPDATE customer SET
value=value+new_value WHERE customer_id=some_id;


三十二、使用REPLACE的例子

REPLACE的功效最像INSERT,除了如一致修老记录在一个唯一索引上所有跟新记录相同之价值,那么老记录在新记录插入前则受剔除。不利用

SELECT 1 FROM t1 WHERE key=# IF found-row LOCK TABLES t1 DELETE FROM t1
WHERE key1=# INSERT INTO t1 VALUES (…) UNLOCK TABLES t1; ENDIF

而用 REPLACE INTO t1 VALUES (…)


三十三、一般技巧

下短主键。联结表时使用数字要休字符串。
当使用多有键码时,第一部分该经常最常用之片。
有问号时,首先利用更多还的排列以得重新好地键码压缩。
如果以同等台机器上运行MySQL客户和服务器,那么在连续MySQL时虽用模拟接字而非是TCP/IP(这得提高性7.5%)。可在一连MySQL服务器时不点名主机名或主机名也localhost来形成。
如果可能,使用–skip-locking(在好几OS上啊默认),这将关门外部锁定并拿提高性能。
使用应用层哈希值而未长键码: SELECT * FROM table_name WHERE
hash=MD5(concat(col1,col2)) AND col_1=’constant’ AND col_2=’constant’

于文件被保存要为文件形式拜访的BLOB,在数据库被仅保留文件称。
删除所有行比删除一老大统分行要赶快。
如果SQL不足够快,研究一下访数的比较底层接口。


三十四、使用MySQL 3.23的好处

MyISAM:可移栽的大表格式 HEAP:内存中的表 Berkeley DB:支持工作之表明。
众多加强的克 动态字符集 更多之STATUS变量 CHECK和REPAIR表 更快之GROUP
BY和DISTINCT LEFT JOIN … IF NULL的优化 CREATE TABLE … SELECT CREATE
TEMPORARY table_name (…) 临时HEAP表到MyISAM表的全自动转换 复制
mysqlhotcopy脚本


三十五、正在主动开发之重要意义

改善事务处理 失败安全之复制 正文搜索 多独说明的删除(之后形成差不多个说明底更新)
更好的键码缓存 原子RENAME (RENAME TABLE foo as foo_old, foo_new as
foo) 查询高速缓存 MERGE TABLES 一个重复好的GUI客户程序

MySQL优化简明指南


2004-05-25

一样、在编译时优化MySQL
如果您于源代码分发安装MySQL,要注意,编译过程对以后的目标程序性能有要的震慑,不同的编译方式恐怕赢得近似之对象文件,但性能可能离开大酷,因此,在编译安装MySQL适应仔细根据你的用类型选择最好可能好之编译选项。这种定制的MySQL可以吧而的使提供最佳性能。

术:选用较好之编译器和于好的编译器选项,这样用可提高性10-30%。(MySQL文档如是说)

1.1、使用pgcc(Pentium GCC)编译器 该编译器(http://www.goof.com/pcg/)针对运行?…继谙低成杓频摹?

1.2、仅以你想行使的字符集编译MySQL
MySQL目前供多上24种不同的字符集,为全球用户以她们自己之言语插入或查看表中的数额。却省气象下,MySQL安装所有者这些字符集,热然而,最好的挑三拣四是靠选择相同种植而要之。如,禁止除Latin1字符集以外的所有其他字符集:


%>./configure -with-extra-charsets=none

[–other-configuration-options]

1.3、将mysqld编译成静态执行文书
将mysqld编译成静态执行文书要不论需一并享库也会获取更好的性能。通过以安排时指定下列选项,可静态编译mysqld。


%>./configure -with-mysqld-ldflags=-all-static

[–other-configuration-options]

1.4、配置样本 下列配置命令时用来加强性能:


%>CFLAGS=”-O6 -mpentiumpro -fomit-frame-pointer” CXX=gcc
CXXFLAGS=”-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors
-fno-exceptions -fno-rtti” ./configure –prefix=/usr/local

–enable-assembler –with-mysqld-ldflags=-all-static –disable-shared

老二、调整服务器
确保以是的编译固然重要,但当下只有是成之率先步,配置众多底MySQL变量同样对服务器的常规运转于关键作用。你得拿这些变量的赋值存在一个安排文件中,以管教它在每次启动MySQL时都由作用,这个布局文件就是my.cnf文件。

MySQL已经提供了几个my.cnf文件的样书,可在/usr/local/mysqld/share/mysql/目录下找到。这些文件分别命名吧
my-small.cnf、
my-medium.cnf、my-large.cnf和my-huge.cnf,规模说明可每当描述配置文件适用的网项目题中找到。如果在独发生一定少内存的系上运行MySQL,而且只是有时的之所以一下,那么my-small.cnf会比较理想,因为它命令mysqld只使最少之资源。类似地,如果您计划构建电子商务超市,而且系统有2G内存,那么您或许只要就此到mysql-huge.cnf文件了。

为采取这些文件被之一个,你需要复制一个太符合需要的文件,改名为my.cnf。你得选取以安排文件三栽意向范围的一致栽:

Global:将my.cnf文件复制到服务器的/etc目录下,这令配置文件被之变量作用为大局,即针对富有服务器上的MySQL数据库服务器中。
Local:将my.cnf文件复制到[MYSQL-INSTALL-DIR]/var/目录下,使得my.cnf作用为特定的服务器。[MYSQL-INSTALL-DIR]意味着MySQL安装目录。
User:你可以更克作用被特定的用户,将my.cnf复制到用户之清目录下。
究竟如何设置my.cnf中的这些变量呢?更进一步说,你可装哪一个变量。虽然所用变量对MySQL服务器相对通用,每一个变量和MySQL的之一些零部件有更特定的涉嫌。如变量max_connects归在mysqld类别下。执行下列命令即可知道:


%>/usr/local/mysql/libexec/mysqld –help

它们显得大量的取舍和和mysqld相关的变量。你可死易地于该行文字之下找有变量:


Possible variables for option –set-variable (-O) are

接下来您得如下设置my.cnf中的那些变量:


set-variable = max_connections=100

她装MySQL服务器的最为可怜并发连接数为100。要包以my.cnf文件中之[mysqld]题目下栽变量设置。
三、表类型

过多MySQL用户可能非常诧异,MySQL确实为用户提供5种不同的表类型,称为DBD、HEAP、ISAM、MERGE和MyIASM。DBD归为工作安全类,而其他也非事务安全类。

3.1、事务安全

DBD Berkeley DB(DBD)表是支持事务处理的阐明,由Sleepycat软件公司(http://www.sleepycat.com)开发。它提供MySQL用户期待已久的意义-事务控制。事务控制以另数据库系统受都是一个无限生价的机能,因为它们确保同等组命令能不负众望地实行。%E5%BC%80%E5%8F%91%E3%80%82%E5%AE%83%E6%8F%90%E4%BE%9Bmysql%E7%94%A8%E6%88%B7%E6%9C%9F%E5%BE%85%E5%B7%B2%E4%B9%85%E7%9A%84%E5%8A%9F%E8%83%BD-%E4%BA%8B%E5%8A%A1%E6%8E%A7%E5%88%B6%E3%80%82%E4%BA%8B%E5%8A%A1%E6%8E%A7%E5%88%B6%E5%9C%A8%E4%BB%BB%E4%BD%95%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B3%BB%E7%BB%9F%E4%B8%AD%E9%83%BD%E6%98%AF%E4%B8%80%E4%B8%AA%E6%9E%81%E6%9C%89%E4%BB%B7%E5%80%BC%E7%9A%84%E5%8A%9F%E8%83%BD%EF%BC%8C%E5%9B%A0%E4%B8%BA%E5%AE%83%E4%BB%AC%E7%A1%AE%E4%BF%9D%E4%B8%80%E7%BB%84%E5%91%BD%E4%BB%A4%E8%83%BD%E6%88%90%E5%8A%9F%E5%9C%B0%E6%89%A7%E8%A1%8C%E3%80%82/)

3.2、非事务安全

HEAP

HEAP表是MySQL中存取数据最抢之说明。这是以他们用存储在动态内存中之一个哈希索引。另一个要领是要是MySQL或服务器崩溃,数据将少。

ISAM

ISAM表是前期MySQL版本的缺省表类型,直到MyIASM开发出来。建议并非再次运其。

MERGE

MERGE是一个妙趣横生之初路,在3.23.25之后出现。一个MERGE表实际上是一个一如既往MyISAM表的会师,合并成一个发明,主要是为了效率原因。这样可增强速度、搜索频率、修复效率并节约磁盘空间。

MyIASM

立即是MySQL的缺省表类型。它基于IASM代码,但发生那么些行之扩大。MyIASM比较好之缘由:

MyIASM表小于IASM表,所以用比较少资源。
MyIASM表在不同的平台及第二迈入制层可移栽。 更要命的键码尺寸,更要命之键码上限。
3.3、指定表类型

乃但是在开创表时指定表的类别。下例创建一个HEAP表:


mysql>CREATE TABLE email_addresses TYPE=HEAP ( ->email char(55)
NOT NULL, ->name char(30) NOT NULL, ->PRIMARY KEY(email) );


BDB表需要有配备工作,参见http://www.mysql.com/doc/B/D/BDB\_overview.html。

3.4、更多之表类型

为使MySQL管理工作更幽默,即将公布的MySQL
4.0拿提供简单栽新的表类型,称为Innobase和Gemeni。

4、优化工具

MySQL服务器本身提供了几久内置命令用于救助优化。

4.1、SHOW

君或产生趣味知道MySQL服务器究竟还了啊,下列命令于出一个总:


mysql>show status;

她给出了一个相当丰富之状态变量及其值的列表。有些变量包含了深终止客户的数、异常终止连接的数、连接尝试的次数、最充分并发连接数和大量别样有效之音讯。这些信对寻找有系统问题跟失效极有价值。
SHOW还能开还多的事体。它可展示关于日志文件、特定数据库、表、索引、进程和权力表中来价之音讯。详见MySQL手册。

4.2、EXPLAIN

当你对SELECT语句时,EXPLAIN解释SELECT命令如何给处理。这不但针对控制是否相应多一个目,而且对准控制一个繁杂的Join如何为MySQL处理还是来扶持的。

4.3、OPTIMIZE

OPTIMIZE语句允许而回复空间和联数据文件碎片,对包含变长行的表展开了大气翻新和去后,这样做特别重要性。OPTIMIZE时止工作吃MyIASM和BDB表。

网站地图xml地图