<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Terrysco&#039;s Blog &#187; mysql</title>
	<atom:link href="http://www.terrysco.com/node/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.terrysco.com</link>
	<description>仅关注于互联网行业， Linux平台开发。</description>
	<lastBuildDate>Sat, 22 May 2010 10:50:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mysql的一些问题总结</title>
		<link>http://www.terrysco.com/node/mysql-tips.html</link>
		<comments>http://www.terrysco.com/node/mysql-tips.html#comments</comments>
		<pubDate>Mon, 28 Sep 2009 15:23:25 +0000</pubDate>
		<dc:creator>terrysco</dc:creator>
				<category><![CDATA[Linux/Shell/DB]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.terrysco.com/?p=269</guid>
		<description><![CDATA[最近时间比较多，决定花些时间深入研究下mysql，尤其是性能和高负载站点的优化问题。不可避免的再次察漏补缺下基础知识，还是发现一些以前忽略的小细节，正可谓温故知新。

使用alter语句修改表的时候，change和modify都可以修改表的定义，不同的是change后面需要写两次列名，但可以修改列名，而modify则不行。
insert语句一个很好的特性：可以一次插入多条记录。格式为：insert into table (field 1, &#8230; , fieldn) values (value1, &#8230; , valuen), (value1, &#8230; , valuen); 这个特性在插入大量记录时，节省很多网络开销，大大提高效率。
其实查询Mysql安装后自带的帮助文档是很方便的，在提示符中键入 ? contents，根据结果依次使用问号操作符做进一步查询，即可获得详细信息。
Blob和text类型会引起一些性能问题，尤其是删除了大量记录的时候。应该使用optimize table功能进行碎片整理。
MyISAM引擎建议使用固定长度的数据列代替可变长度的数据列，而innodb引擎建议使用varchar类型，因为char平均占用空间多于varchar。
可以使用合成索引来提高大文本字段的查询性能，在表的设计中多一个字段，用来存储大文本的md5值，精确匹配大文本查询的时候可以利用该文本的md5值进行查询，以减少I/O，提高查询效率。

]]></description>
		<wfw:commentRss>http://www.terrysco.com/node/mysql-tips.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]深入Mysql字符集设置</title>
		<link>http://www.terrysco.com/node/mysql-charset.html</link>
		<comments>http://www.terrysco.com/node/mysql-charset.html#comments</comments>
		<pubDate>Sat, 15 Nov 2008 04:24:38 +0000</pubDate>
		<dc:creator>terrysco</dc:creator>
				<category><![CDATA[Linux/Shell/DB]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.terrysco.com/?p=250</guid>
		<description><![CDATA[作者:laruence(http://www.laruence.com/)
· 本文地址: http://www.laruence.com/2008/01/05/12.html
· 转载请注明出处


根据Chaos  Wang的PPT整理而成， 在此再次感谢Chaos Wang的此次TechTalk
基本概念
• 字符(Character)是指人类语言中最小的表义符号。例如’A&#8217;、’B&#8217;等；
• 给定一系列字符，对每个字符赋予一个数值，用数值来代表对应的字符，这一数值就是字符的编码(Encoding)。例如，我们给字符’A&#8217;赋予数值0，给字符’B&#8217;赋予数值1，则0就是字符’A&#8217;的编码；
• 给定一系列字符并赋予对应的编码后，所有这些字符和编码对组成的集合就是字符集(Character Set)。例如，给定字符列表为{’A&#8217;,’B&#8217;}时，{’A&#8217;=&#62;0, ‘B’=&#62;1}就是一个字符集；
• 字符序(Collation)是指在同一字符集内字符之间的比较规则；
• 确定字符序后，才能在一个字符集上定义什么是等价的字符，以及字符之间的大小关系；
• 每个字符序唯一对应一种字符集，但一个字符集可以对应多种字符序，其中有一个是默认字符序(Default Collation)；
• MySQL中的字符序名称遵从命名惯例：以字符序对应的字符集名称开头；以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如：在字符序“utf8_general_ci”下，字符“a”和“A”是等价的；
MySQL字符集设置
• 系统变量：
– character_set_server：默认的内部操作字符集
– character_set_client：客户端来源数据使用的字符集
– character_set_connection：连接层字符集
– character_set_results：查询结果字符集
– character_set_database：当前选中数据库的默认字符集
– character_set_system：系统元数据(字段名等)字符集
– 还有以collation_开头的同上面对应的变量，用来描述字符序。
• 用introducer指定文本字符串的字符集：
– 格式为：[_charset] ’string’ [COLLATE collation]
– 例如：
• SELECT _latin1 ’string’;
• SELECT _utf8 ‘你好’ COLLATE utf8_general_ci;
– 由introducer修饰的文本字符串在请求过程中不经过多余的转码，直接转换为内部字符集处理。
MySQL中的字符集转换过程
1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection；
2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集，其确定方法如下：
• 使用每个数据字段的CHARACTER SET设定值；
• 若上述值不存在，则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展，非SQL标准)；
• 若上述值不存在，则使用对应数据库的DEFAULT CHARACTER SET设定值；
• 若上述值不存在，则使用character_set_server设定值。
3. 将操作结果从内部操作字符集转换为character_set_results。

常见问题解析
• 向默认字符集为utf8的数据表插入utf8编码的数据前没有设置连接字符集，查询时设置连接字符集为utf8
– 插入时根据MySQL服务器的默认设置，character_set_client、character_set_connection和character_set_results均为latin1；
– [...]]]></description>
		<wfw:commentRss>http://www.terrysco.com/node/mysql-charset.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转]MySQL索引分析和优化</title>
		<link>http://www.terrysco.com/node/mysql-index-opt.html</link>
		<comments>http://www.terrysco.com/node/mysql-index-opt.html#comments</comments>
		<pubDate>Tue, 15 Jul 2008 02:56:49 +0000</pubDate>
		<dc:creator>terrysco</dc:creator>
				<category><![CDATA[Linux/Shell/DB]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.terrysco.com/?p=245</guid>
		<description><![CDATA[ 
// 300) {
										text = text + "\r\n\n本文来自CSDN博客，转载请标明出处：" + location.href;
										clipboardData.setData("text", text); 
									}
								}, 100);
							}
						}
// ]]&#62; // 索引用来快速地寻找那些具有特定值的记录，所有MySQL索引都以B-树的形式保存。如果没有索引，执行查询时MySQL必须从第一个记录开始扫描 整个表的所有记录，直至找到符合要求的记录。表里面的记录数量越多，这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引，MySQL无需扫描任 何记录即可迅速得到目标记录所在的位置。如果表有1000个记录，通过索引查找记录至少要比顺序扫描记录快100倍。
假设我们创建了一个名为people的表：




CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );




然后，我们完全随机把1000个不同name值插入到people表。下图显示了people表所在数据文件的一小部分：

可以看到，在数据文件中name列没有任何明确的次序。如果我们创建了name列的索引，MySQL将在索引中排序name列：

对于索引中的每一项，MySQL在内部为它保存一个数据文件中实际记录所在位置的“指针”。因此，如果我们要查找name等于 “Mike”记录的peopleid（SQL命令为“SELECT peopleid FROM people WHERE name=&#8217;Mike&#8217;;”），MySQL能够在name的索引中查找“Mike”值，然后直接转到数据文件中相应的行，准确地返回该行的 peopleid（999）。在这个过程中，MySQL只需处理一个行就可以返回结果。如果没有“name”列的索引，MySQL要扫描数据文件中的所有 记录，即1000个记录！显然，需要MySQL处理的记录数量越少，则它完成任务的速度就越快。
索引的类型
MySQL提供多种索引类型供选择：
普通索引
这是最基本的索引类型，而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建：




创建索引，例如CREATE INDEX &#60;索引的名字&#62; ON tablename (列的列表);
修改表，例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引，例如CREATE TABLE tablename ( [...], INDEX [索引的名字] [...]]]></description>
		<wfw:commentRss>http://www.terrysco.com/node/mysql-index-opt.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[转载]优化MySQL数据库性能</title>
		<link>http://www.terrysco.com/node/mysql-optimize.html</link>
		<comments>http://www.terrysco.com/node/mysql-optimize.html#comments</comments>
		<pubDate>Fri, 08 Jun 2007 20:12:50 +0000</pubDate>
		<dc:creator>terrysco</dc:creator>
				<category><![CDATA[Linux/Shell/DB]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.anyliv.com/www.terrysco.com/?p=16</guid>
		<description><![CDATA[<p>本文从八个方面来讲解如何全新优化MySQL数据库性能。</p><p>　　<strong>1、选取最适用的字段属性</strong></p><p>　　MySQL可以很好的支持大数据量的存取，但是一般说来，数据库中的表越小，在它上面执行的查询也就会越快。因此，在创建表的时候，为了获得更 好的性能，我们可以将表中字段的宽度设得尽可能小。例如，在定义邮政编码这个字段时，如果将其设置为CHAR(255),显然给数据库增加了不必要的空 间，甚至使用VARCHAR这种类型也是多余的，因为CHAR(6)就可以很好的完成任务了。同样的，如果可以的话，我们应该使用MEDIUMINT而不 是BIGIN来定义整型字段。</p>...
]]></description>
		<wfw:commentRss>http://www.terrysco.com/node/mysql-optimize.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
