互联网创业集团的五个点电子商务


4狼性文化,把员工当成畜生来管理,进行那多少个所谓的“最后一位淘汰制”每个星期都会有人莫名其妙的距离然后又有人来,你会意识你周围的同事,几乎一个月换一批人,当然你自己估量也待不久,一年换好几批人,这样的小集团测度一抓一把,可是却能时时忽悠到没什么工作经验的应届毕业生和实习生帮他们卖命工作,当压榨完了就上赶人走,继续换人。

+————————–+——–+———+  |插入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  | | +————————–+——–+———+

3被成功学洗脑,中国广大小商店的小业主都被成功学洗脑,天天强迫职工读成功学的书,每一日唱歌跳舞喊口号打鸡血,而且为了集团尽早成功,对员工开展军事化管理,啥叫军事化管理就是可以随心所欲殴打辱骂员工,这一个员工却不敢吭声,为了保住饭碗终日唯唯诺诺做人简直像奴才一样。

二十三、MySQL哪天不利用索引

趁着互联网不断进化,国家也在倡导互联网+所以不断涌现出大方创业集团,现在互联网创业成本越来越低,在一线城市众多写字楼都挂着体系孵化,新三板挂牌上市创业基地,电子商务商务大厦,等等一堆写字楼。还提供了椅子和书桌,于是不断有局部所谓的创业公司不断搬进来,一搬这样的集团不超过10个人,一般景观下一年半载就会倒一批,然后又换一批进入,人士流动可以说是极高来形容,我事先待过几间小集团,都不会抢先三十人,其中我回忆最深厚的有几件事。


电子商务 1


1权利加班,日常是早上九点上班,早上9点收工,星期二到周六都这样,有两回因为总监心血来潮说为了赶进度,要求周二要回去加班,当然为了保住一份工作多数人都会回来加班,可是有五个小伙因为太过疲劳,不甘于回到加班,结果是周四遍到老董立马要劝退他们四个。人事立刻行动进行谈话,立即收拾东西走人。同事都提心吊胆,生怕下一个轮到自己。没人敢吭一声,然后视而不见继续工作就像被圈养的猴子一样。

在展开合并时从另一个表中提取行时 SELECT * from t1,t2 where
t1.col=t2.key_part

互联网确实是足以化解广大题目,可是互联网创业要旨都是要烧钱格局中开辟出来一条血路,假若没有技术改进,没有有力的资金投入,创业战败基本是百分之一百,不过众五个人看着互联网在中国如火如荼都想分一杯羹,拉一根网线,买几台总计机,招聘多少个平常的程序员和UI就幻想着改变世界,最终皆以失败告终甚至发不出工资,互联网创业将会愈加困难,我期待互联网创业集团到最后不要成为外包公司,人力外包,技术外包,开发一些杂质网站和部分毫无技术含量的app。

十六、MySQL如何次存储数据

5欣赏画大饼吹牛皮,现在广大创业公司动不动就说要竞逐bat,三年上市,五年媲美世界巨头比如Google,苹果,微软等营业所,公司明明只有20人,老总却时时开会说,你们都是股东,都是本人的一块人,公司的花色上线后,你们都能买车买房,你们都是商店的总经理,我没把你们真是普通员工,我们都是手拉手人,当然这只是说说,然则有一对人生经验不够充裕的年轻人却仍旧相信,自己也是主任,也是股东,认为这是和谐翻身的好机遇,项目中标后自己也能买车买房把温馨父母接过来,娶上精粹的女明星做妻子走向人生巅峰,不过远远没有想到公司假设拿不到第二轮融资,或者资金链断裂的时候,你总经理会坚决地把你们一切开除,即使运气好一些类型能挣到钱,顶多就是请你们吃饭,关于奖金和分配完全只字不提,所以您的业主对您说把你们真是亲兄弟当成家人真是合伙人你相对不要信,你从未采用价值的时候她不会有一丝同情心,有的永远都只是利益。


2随意解雇员工,仿佛是小店铺有意的店铺文化,小店铺的小业主其实更加喜欢憋人吹捧他,有四遍的公物会议上,总监宣布三遍演说,台下的只有十名职工,也是听众,解说结束后下边的十名员工大声说好,接着不断说有些投其所好的话,当然很大程度是为了保住工作,至于解说内容好不佳,其实只是就是有的废话加上自己的平庸观点,说白了就是荒废我们时刻,可是有一名新来的职工听完后不拍手,不叫好,毫无反应,首席执行官就记住他了,然后就说那名新人不合群,与公司公司文化有很大的出入,即刻叫人事把她赶走,其实情欲也很难办因为他没犯哪些错误,工作显现也不错,不过首席营业官如此说他俩也不得不依据这样来办就不管找个借口打发他走,其实他也不清楚怎么回事,反正人家让您你也不容许赖着不走只能自认糟糕。

对大数据库,优化的次序一般是RAM、神速硬盘、CPU能力。

二十二、MySQL什么日期使用索引

十七、MySQL表类型

更多的内存通过将最常用的键码页面存放在内存中能够加速键码的改进。

决不交流区。假使内存不足,扩充更多的内存或部署你的系统运用较少内存。
不要采纳NFS磁盘(会有NFS锁定的问题)。
扩大系统和MySQL服务器的开辟文件数量。(在safe_mysqld脚本中插手ulimit -n
#)。 增添系统的进程和线程数量。
如若您有相对较少的大表,告诉文件系统不要将文件打碎在不同的磁道上(Solaris)。
使用扶助大文件的文件系统(Solaris)。
选用使用哪一类文件系统。在Linux上的Reiserfs对于打开、读写都万分快。文件检查只需几秒种。

[–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

三、优化磁盘

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和其余 可能不错,可我们毫不它们。

使用优化的表类型(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 复制功用


十五、优化表

当使用不以通配符起首的LIKE SELECT * FROM table_name WHERE key_part1
LIKE ‘jani%’

四、优化操作系统

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

接下来你可以如下设置my.cnf中的那多少个变量:



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表大小。

倘使拥有列是定长格式(没有VARCHAR、BLOB或TEXT),MySQL将以定长表格式创设表,否则表以动态长度格式创立。
定长格式比动态长度格式快很多并更安全。
动态长度行格式一般占用较少的蕴藏空间,但一旦表频繁更新,会发出碎片。
在好几情形下,不值得将有所VARCHAR、BLOB和TEXT列转移到另一个表中,只是取得主表上的更神速度。
利用myiasmchk(对ISAM,pack_iasm),能够成立只读压缩表,那使磁盘使用率最小,但利用慢速磁盘时,这特别正确。压缩表充分地利用将不再更新的日志表

六、优化利用

HEAP表:固定行长的表,只存储在内存中并用HASH索引举办索引。 ISAM表:MySQL
3.22中的早期B-tree表格式。 MyIASM:IASM表的新本子,有如下扩张:
二进制层次的可移植性。 NULL列索引。 对变长行比ISAM表有更少的零碎。
补助大文件。 更好的目录压缩。 更好的键吗总括分布。
更好和更快的auto_increment处理。 来自Sleepcat的伯克利(Berkeley)DB(BDB)表:事务安全(有BEGIN WORK/COMMIT|ROLLBACK)。

五、选用采纳编程接口

应用程序

十、编译和设置MySQL

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

要是拔取HEAP表且不用=搜索所有键码部分。

二十五、学会运用SHOW PROCESSLIST


十二、优化SQL


二十二、MySQL扩大/优化-提供更快的快慢

追寻一个索引而在另一个索引上做ORDER BY SELECT * from table_name WHERE
key_part1 = # ORDER BY key2

扬SQL之长,另外事情交由使用去做。使用SQL服务器来做:

ALL和限制类型指示一个地下的问题。

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 | |
+——-+——–+—————+———+———+——————+——+———————————+

技巧:

绝不接纳SQL来做:

在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)(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

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

十三、不同SQL服务器的速度差异(以秒计)

通过位你的系统挑选可能最好的编译器,你平常可以获取10-30%的性质提升。
在Linux/AMD平台上,用pgcc(gcc的跑马芯片优化版)编译MySQL。不过,二进制代码将只好运行在AMD奔腾CPU上。
对于一种特定的平台,使用MySQL参考手册上引进的优化选项。
一般地,对特定CPU的原生编译器(如Sparc的Sun
Workshop)应该比gcc提供更好的性质,但不连续这么。
用你将利用的字符集编译MySQL。
静态编译生成mysqld的执行文书(用–with-mysqld-ldflags=all-static)并用strip
sql/mysqld整理最后的施行文书。
注意,既然MySQL不应用C++增添,不带扩大襄助编译MySQL将得到巨大的性质进步。
要是操作系统帮忙原生线程,使用原生线程(而不用mit-pthreads)。
用MySQL基准测试来测试最终的二进制代码。

找出瓶颈(CPU、磁盘、内存、SQL服务器、操作系统、API或使用)并集中用力化解。
使用予以你更神速度/灵活性的扩展。
渐渐理解SQL服务器以便能为您的题材采纳可能最快的SQL构造并避免瓶颈。
优化表布局和询问。 使用复制以取得更快的选用(select)速度。
假若你有一个慢速的网络连接数据库,使用压缩客户/服务器协议。
不要害怕时行使的第一个版本不可以完善地移植,在您解决问题时,你总是可以在事后优化它。

为系统、程序和临时文件配备一个专用磁盘,若是确是举办过多修改工作,将改进日志和业务日志放在专用磁盘上。
低寻道时间对数据库磁盘十分首要。对与大表,你可以臆想您将索要log(行数)/log(索引块长度/3*2/(键码长度

对此数据库存放在一个专用服务器的系列,应该考虑1G的以太网。延迟与吞吐量同样至关首要。

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

倘使可能,偶尔运行一下OPTIMIZE table,这对大量翻新的变长行非凡首要。
偶尔用myisamchk -a更新一下表中的键码分布总结。记住在做事先关闭MySQL。
即便有碎片文件,可能值得将所有文件复制到另一个磁盘上,清除原来的磁盘并拷回文件。
虽然曰镪问题,用myisamchk或CHECK table检查表。 用mysqladmin -i10
precesslist extended-status监控MySQL的情状。 用MySQL
GUI客户程序,你可以在不同的窗口内监控进程列表和景色。 使用mysqladmin
debug拿到有关锁定和属性的音信。

mysql>show status;

它交给了一个一定长的状态变量及其值的列表。有些变量包含了充足终止客户的数额、非凡终止连接的多少、连接尝试的次数、最大并发连接数和大量别样有效的信息。这一个音信对找出序列问题和低效极具价值。
SHOW仍是可以做更多的工作。它可以显示关于日志文件、特定数据库、表、索引、进程和权杖表中有价值的音讯。详见MySQL手册。

4.2、EXPLAIN

当你面对SELECT语句时,EXPLAIN解释SELECT命令咋样被处理。这不单对控制是否应该增添一个目录,而且对控制一个犬牙交错的Join咋样被MySQL处理都是有帮带的。

4.3、OPTIMIZE

OPTIMIZE语句允许你回复空间和统一数据文件碎片,对含蓄变长行的表举办了汪洋改进和删除后,这样做特别紧要。OPTIMIZE目前只工作于MyIASM和BDB表。

一、我们可以且相应优化什么?

九、优化MySQL


视察数据(如日期) 成为一只总括器

在所有用在查询中的列是键码的一有的时刻 SELECT key_part3 FROM
table_name WHERE key_part1=1


二十一、MySQL表高速缓存工作原理



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


Perl DBI/DBD ODBC JDBC Python(或任何有科普SQL接口的语言)
你应该只利用存在于所有目标SQL服务器中或可以很容易地用其它社团模拟的SQL构造。www.mysql.com上的Crash-me页可以协理您。
为操作系统/SQL服务器编写包装程序来提供紧缺的效劳。


  • 数据指针长度))+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)。
    对于一些特定应用,能够对一些特定表使用内存磁盘,但一般不需要。

利用SHOW processlist来发现正在做什么样:
+—-+——-+———–+—-+———+——+————–+————————————-+
| Id | User | Host | db | Command | 提姆(Tim)e | State | Info |
+—-+——-+———–+—-+———+——+————–+————————————-+
| 6 | monty | localhost | bp | Query | 15 | Sending data | select *
from station,station as s1 | | 8 | monty | localhost | | Query | 0 | |
show processlist |
+—-+——-+———–+—-+———+——+————–+————————————-+


硬件

如果不选择工作安全(transaction-safe)的表或有大表并且想制止长文件检查,一台UPS就可以在电源故障时让系统安全关闭。


set-variable = max_connections=100

它设置MySQL服务器的最大并发连接数为100。要保管在my.cnf文件中的[mysqld]题目下插入变量设置。
三、表类型

成百上千MySQL用户可能很奇异,MySQL确实为用户提供5种不同的表类型,称为DBD、HEAP、ISAM、MERGE和MyIASM。DBD归为工作安全类,而其余为非事务安全类。

3.1、事务安全

DBD 贝克莱(Berkeley)(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服务器究竟更了如何,下列命令给出一个总括:


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

SQL服务器(设置和询问)

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)))
对每个表使用最可行的表格式。
在不同表中保存相同消息的列应该有同样的定义并富有相同的列名。





运用编程接口(API)

操作系统/软件库

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

十一、维护

对此每一条你觉得太慢的查询使用EXPLAIN!

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


一经选取以一个通配符起先的LIKE SELECT * FROM table_name WHERE
key_part1 LIKE ‘%jani%’


十四、紧要的MySQL启动选项


每个MyISAM表的开拓实例(instance)使用一个目录文件和一个数据文件。如若表被五个线程使用或在相同条查询中动用五遍,MyIASM将共享索引文件而是打开数据文件的另一个实例。
假诺所有在高速缓存中的表都在利用,缓存将暂时扩充到比表缓存尺寸大些。假假若这样,下一个被假释的表将被关门。
你可以透过检查mysqld的Opened_tables变量以检讨表缓存是否太小。假如该值太高,你应有增大表高速缓存。

[–other-configuration-options]

1.3、将mysqld编译成静态执行文书
将mysqld编译成静态执行文书而无需共享库也能得到更好的性能。通过在配置时指定下列选项,可静态编译mysqld。


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

若果MySQL能揣度出它将可能比扫描整张表还要快时,则不行使索引。例如假设key_part1均匀分布在1和100里面,下列查询中动用索引就不是很好:
SELECT * FROM table_name where key_part1 > 1 and key_part1 <
90

假定不是用键码第一部分 SELECT * FROM table_name WHERE key_part2=1

一旦你需要巨大的多寡库表(>2G),你应有考虑采用64位的硬件结构,像Alpha、Sparc或将要推出的IA64。因为MySQL内部使用大量64位的平头,64位的CPU将提供更好的性质。

应当集中精力解决问题。 在编写应用时,应该控制怎么着是最关键的: 速度
操作系统间的可移植性 SQL服务器间的可移植性 使用持续的总是。.
缓存应用中的数据以减小SQL服务器的负载。 不要查询利用中不需要的列。
不要使用SELECT * FROM table_name…
测试应用的拥有片段,但将大部分精力放在在可能最坏的创设的载荷下的测试全部应用。通过以一种模块化的法门举行,你应当能用一个飞快“哑模块”替代找到的瓶颈,然后很容易地标明下一个瓶颈。
如若在一个批处理中进行大量改动,使用LOCK
TABLES。例如将五个UPDATES或DELETES集中在一块。

–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连串下。执行下列命令即可知道:


慎选编译器和编译选项。 位你的系列查找最好的启动选项。
通读MySQL参考手册并阅读保罗 DuBios的《MySQL》一书。(已有普通话版-译注)
多用EXPLAIN SELECT、SHOW VARIABLES、SHOW STATUS和SHOW PROCESSLIST。
通晓查询优化器的办事原理。 优化表的格式。 维护你的表(myisamchk、CHECK
TABLE、 OPTIMIZE TABLE) 使用MySQL的扩展效用以让总体急迅完成。
即便你注意到了您将在诸多场合需要或多或少函数,编写MySQL UDF函数。
不要拔取表级或列级的GRANT,除非您真的需要。
购买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 在展开无键吗的联合时采纳。


精明地拔取键码。 键码适合搜索,但不适合索引列的插入/更新。
保持数据为数据库第三范式,但绝不顾虑冗余信息或这只要您需要更快的速度,创立总括表。
在大表上不做GROUP BY,相反创造大表的下结论表并查询它。 UPDATE table set
count=count+1 where key_column=constant分外快。
对于大表,或许最好偶尔生成总计表而不是直接维持总结表。
充裕利用INSERT的默认值。

数据库以目录存储。 表以文件存储。
列以变长或定长格式存储在文件中。对BDB表,数据以页面格局储存。
协助基于内存的表。 数据库和表可在不同的磁盘上用符号连接起来。
在Windows上,MySQL补助用.sym文件之中符号连接数据库。

二、优化硬件

八、如若您需要更快的进度,你应有:

+————————–+——–+———+ |通过键码读取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 | |
+————————–+——–+———+ 

七、应该采用可移植的接纳


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

它显得大量的挑选及与mysqld相关的变量。你可以很容易地在该行文字之下找出变量:


二十四、学会使用EXPLAIN

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

找出基于WHERE子句的行。 JOIN表 GROUP BY ORDER BY DISTINCT

在HEAP表上应用ORDER BY。

Leave a Comment.