data目录下的对应目录中只有.frm的表结构文件
数据存储在ibdata文件中,iblog为日志文件,具体位置由“innodb_data_home_dir”参数确定,默认为mysql根目录
备份时需要备份以上全部文件,恢复时如果启动报错可以尝试删除log文件

,

用网盘同步时可以减少同步的文件,在conf下新建local.protected.php

<?php
if(empty($_ENV['TEMP'])) {
$conf['cachedir'] = '/tmp/dokuwiki/cache';
$conf['tmpdir']   = '/tmp/dokuwiki/tmp';
$conf['lockdir']  = '/tmp/dokuwiki/locks';
@mkdir('/tmp/dokuwiki');
@mkdir($conf['cachedir']);
@mkdir($conf['tmpdir']);
@mkdir($conf['lockdir']);
} else {
$conf['cachedir'] = $_ENV['TEMP'].'/dokuwiki/cache';
$conf['tmpdir']   = $_ENV['TEMP'].'/dokuwiki/tmp';
$conf['lockdir']  = $_ENV['TEMP'].'/dokuwiki/locks';
@mkdir($_ENV['TEMP'].'/dokuwiki');
@mkdir($conf['cachedir']);
@mkdir($conf['tmpdir']);
@mkdir($conf['lockdir']);
}
,
var result = $.ajax({type:'POST',url:'index.php',async:false,cache:false}).responseText;
,

全文检索

分词

,

删除用户目录中.android下的debug.keystore和ddms.cfg两个文件

测试数据
CREATE TABLE IF NOT EXISTS `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`num` int(11) NOT NULL,
`num_char` varchar(50) NOT NULL,
PRIMARY KEY (`id`),
KEY `num` (`num`),
KEY `num_char` (`num_char`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
插入随机数400000条记录,num和num_char内容一样,只是类型不同。分别建立索引。

测试过程

1、数值字段类型匹配查询
查询语句:EXPLAIN SELECT * FROM `test` WHERE num = 837159
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE test ref num num 4 const 12

状态 时间
starting 0.000079
Opening tables 0.000014
System lock 0.000005
Table lock 0.000008
init 0.000025
optimizing 0.000008
statistics 0.000055
preparing 0.000013
executing 0.000002
Sending data 0.000371
end 0.000005
query end 0.000002
freeing items 0.000074
logging slow query 0.000002
cleaning up 0.000003
显示行 0 – 12 (13 总计, 查询花费 0.0016 秒)
查询结果正常,正确使用了索引。

2、数值字段类型不匹配查询
查询语句:EXPLAIN SELECT * FROM `test` WHERE num = ’837159′
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE test ref num num 4 const 12

状态 时间
starting 0.000069
Opening tables 0.000015
System lock 0.000004
Table lock 0.000007
init 0.000024
optimizing 0.000009
statistics 0.000148
preparing 0.000014
executing 0.000002
Sending data 0.000321
end 0.000004
query end 0.000002
freeing items 0.000063
logging slow query 0.000001
cleaning up 0.000003
显示行 0 – 12 (13 总计, 查询花费 0.0011 秒)

查询结果正常,正确的使用了索引,看来MySQL把查询关键字’837159′隐式转换为了数值类型进行比较。

3、字符字段类型匹配查询
查询语句:EXPLAIN SELECT * FROM `test` WHERE num_char = ’837159′
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE test ref num_char num_char 52 const 13 Using where

查询结果正常,正确的使用了索引,但是key长度比数值型要长,整体性能肯定比数值型要差。

状态 时间
starting 0.000197
Opening tables 0.000031
System lock 0.000013
Table lock 0.000017
init 0.000088
optimizing 0.000022
statistics 0.000284
preparing 0.000039
executing 0.000005
Sending data 0.001232
end 0.000017
query end 0.000005
freeing items 0.001041
logging slow query 0.000004
cleaning up 0.000007
显示行 0 – 12 (13 总计, 查询花费 0.0065 秒)

4、字符字段类型不匹配查询
查询语句:EXPLAIN SELECT * FROM `test` WHERE num_char = 837159
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE test ALL num_char NULL NULL NULL 400348 Using where

状态 时间
starting 0.000072
Opening tables 0.000013
System lock 0.000011
Table lock 0.000008
init 0.000025
optimizing 0.000008
statistics 0.000036
preparing 0.000012
executing 0.000002
Sending data 0.244489
end 0.000008
query end 0.000003
freeing items 0.000095
logging slow query 0.000002
cleaning up 0.000004
显示行 0 – 12 (13 总计, 查询花费 0.2451 秒)

查询结果异常,没有正确使用索引,进行了全表扫描。关于这个问题,没有找到合理的解释,分析有可能MySQL把字段的每个值转换为数字然后和关键字进行比较,造成的和索引类型不一致,导致索引失效。并且由于转换带来的开销,使整个查询效率更加低效。

5、特殊情况
从测试情况来看,如果字段为数值型,关键字加不加引号似乎影响并不大,但是在一种特殊情况下会有比较大的影响。

例:
UPDATE `test` SET num_char = ‘aaa’ WHERE num = ’837159′
13 row(s) affected. ( 查询花费 0.0044 秒 )

update `test` set num_char=’aaa’ WHERE num = ’83715999999′
0 row(s) affected. ( 查询花费 4.2821 秒 )

UPDATE `test` SET num_char = ‘aaa’ WHERE num = 83715999999
0 row(s) affected. ( 查询花费 0.0032 秒 )

当进行更新操作时正常情况下没有异常,但是如果数值超出了int的范围加引号的时候就会有相当大的问题。具体为什么出现这种情况还不是很清楚,需要进一步深入分析。

总结
1、查询关键字要保证和查询字段类型一致,在类型不一致时MySQL需要进行隐式转换,转换成相同的类型才能进行比较。隐式转换可能会使索引失效,严重影响系统性能。尤其是字段为字符型但是查询关键字没有加引号的情况下,开销相当的巨大。
2、如果类型不一致,有一方为数值行,MySQL会优先转换成数值型。
3、数值类型的查询效率要比字符型高。
4、如果字段为字符型,查询关键字一定要加上引号。
5、如果字段为数值型,查询关键字最好不要加引号,虽然只是很小的可能会出现问题,但是性能影响巨大,至于安全隐患可以使用intval函数强制转换来避免。
6、总之要避免隐式转换,隐式转换本身会有系统开销,而且会造成不可预知的影响。

, , ,

MySQL索引总结

索引简介
系统中最频繁的操作应该就是查询操作了,使用索引可快速访问表中的特定信息,提高查询和排序的操作效率。在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。当表中有大量记录时如果没有索引,查询时需要对表中的记录逐一匹配,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作。索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与书籍中的索引的方式很相似,它搜索索引以找到特定值,然后顺指针找到包含该值的行。
MySQL的索引类型:
1、普通索引
基本的索引类型,没有唯一性之类的限制,是最常用的索引类型。
2、唯一性索引
这种索引和普通索引基本相同,但索引列的所有值都只能出现一次,即必须唯一。
3、主键
主键是一种唯一性索引,它必须指定为“PRIMARY KEY”,每个表只能有一个主键,并且不能有null值。
主键的选择:
1)主键的主要作用就是唯一的标识一行,所以主键不应该与业务和逻辑有太多关系。
2)优先使用自增Integer类型作为主键使用。
3)尽量避免使用字符类型作为主键,因为字符类型比Integer类型占用更多存储空间,而且排序和查找也比Integer效率低。
全文索引Full-text
目前MySQL中只有MyISAM存储引擎支持全文索引,而且仅支持CHAR、VARCHAR、TEXT三种数据类型。一般来讲,全文索引用于替代效率低下的LIKE操作。由于全文索引开销比较大,且对中文支持问题在使用时需要提前做好评估。
组合索引
多个列组合在一起的索引,可以包含15个列,但是会占用更多的存储空间,实际使用时需要根据实际情况做出评估。

索引的优点
1、索引可以大幅提高数据的检索速度,数据量越大时,索引的效率越高  
2、主键索引和唯一索引可以保证数据库表中每一行数据的唯一性   
3、在使用group by和order by检索数据时,可以显著减少查询中分组和排序的时间

索引的缺点
1、索引需要占用额外的存储空间,如果有多个组合索引,会占用相当多的磁盘空间,有时索引所占的磁盘空间会比主表还要多。
2、在增删改数据时需要额外的开销来维护索引,如果索引较多会对整体性能有比较大的影响。所以使用索引前要对系统的整体进行分析,分析需要建立的表是以查询为主还是以写入为主,然后再决定是否建立索引。

索引的使用原则和注意事项
1、主要的查询字段和排序字段应该建立索引。
2、过滤效果不佳的字段不应该建立索引,通过该字段并不能有效的过滤出较少的数据集合,这时索引并不能发挥出作用,有时甚至比全表扫描还要慢。
3、更新过于频繁的字段不应该建立索引,由于表更新时会同时维护索引,如果更新过于频繁,会对整体性能有很大的影响。
4、不等比较时不能使用索引,比如’!=’、’ <>‘、 NOT。
5、函数或运算后的字段不能使用索引,比如abs(col)、col+1等。
6、使用like语句时,以通配符开头不能使用索引,比如LIKE ‘%key’。
7、字段类型和关键字类型不统一时,造成的隐式类型转换,可能会使索引失效。比如字段col的类型为字符型,查询语句为 “where col = 123″,这样MySQL会隐式转换类型,无法使用索引,造成查询效率低下。
8、由于MySQL Query Optimizer通常只会选择一个索引,索引具体建立索引时需要根据具体的查询情况,分析使用要建立组合索引还是单一索引,哪个字段需要建立索引。并不是把所有的查询字段都建立索引就能提高检索效率,这样不仅浪费了更多的存储空间还有可能使Query Optimizer错误的选择了不合适的索引,造成查询效率低下。
9、尽可能使用短的索引字段,可以提高检索效率占用更少的存储空间。

Explain的使用
通过使用Explain命令,可以让MySQL Query Optimizer显示出查询语句的执行计划。
比如:EXPLAIN SELECT * FROM goods WHERE goods_id = 40;执行计划显示这是一个简单查询,使用了主键索引。

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE goods const PRIMARY PRIMARY 4 const 1

select_type
SIMPLE:简单SELECT(不使用UNION或子查询)
PRIMARY: 最外面的SELECT
UNION: UNION中的第二个或后面的SELECT语句
DEPENDENT UNION: UNION中的第二个或后面的SELECT语句,取决于外面的查询
UNION RESULT: UNION的结果
UBQUERY:子查询中的第一个SELECT
DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询
DERIVED:导出表的SELECT(FROM子句的子查询)
主要的type类型,从优到劣
Const:表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。Const类型速度很快。
Eq_ref:最多匹配一条记录,一般通过主键或者唯一索引访问。
Ref:对于每个来自于前面的表的行组合,所有有匹配索引值的行将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是UNIQUE或PRIMARY KEY(换句话说,如果联接不能基于关键字选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型是不错的。
index_merge:该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。
Range:索引范围扫描。 只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。key_len包含所使用索引的最长关键元素。
Index:全索引扫描。该联接类型与ALL相同,除了只有索引树被扫描。通常比ALL快,因为索引文件通常比数据文件小。
ALL:全表扫描,没有可用的索引。

Possible_keys
可以使用的索引列表
Key
选中使用的索引
Key_len
索引长度
Extra
Using filesort:使用了ORDER BY语句但是没有可用索引的时候使用的排序算法,性能会有影响。
Using index:只需要查询索引即可获取数据是一种比较理想的方式。
Using temporary:使用了临时表,性能比较差,一般需要优化。

使用Profiling 分析查询性能
MySQL 5.0.37以上版本提供了MySQL Query Profiler,可以查询到此SQL会执行多少时间,并看出CPU/Memory使用量,执行过程中System lock, Table lock花多少时间等等,Query PRofiler是一个非常方便的Query诊断分析工具,可以用来分析查询语句的性能,分析语句执行过程中的资源消耗情况。
比如:select * from goods where goods_id >10;
状态 时间
starting 0.000075
Opening tables 0.000013
System lock 0.000005
Table lock 0.000006
init 0.000044
optimizing 0.000007
statistics 0.000041
preparing 0.000018
executing 0.000002
Sending data 0.000738
end 0.000016
query end 0.000002
freeing items 0.001547
logging slow query 0.000005
cleaning up 0.000006

,

1、打开firefox,about:config
2、找到”browser.contentHandlers.types.0.uri”把”http://fusion.google.com/add?feedurl=%s”修改为”http://www.google.com/reader/view/feed/%s”
3、重启firefox

,

网页截图 – Webpage Screenshot
Edit This Cookie
Firebug Lite for Google Chrome
MeasureIt!
PHP Console
Proxy Switchy! 代理
RSS Subscription Extension
Session Manager
Sexy Undo Close Tab
Speed Tracer (by Google)
Super Drag
Window Resizer
浏览器兼容性检测工具

,

Firebug
Firecookie
FirePHP
FireShot 截图
FoxyProxy Standard 代理
ColorZilla 取色
Compatibility Detector 标准检查
JavaScript Debugger
MeasureIt 尺子
RSS Icon In Awesombar
Siphon 插件同步
Tab Mix Plus 标签
View Source Chart 查看源码
YSlow
Cache Status 缓存清理
ChmFox chm阅读扩展
DNS Flusher dns刷新
ScrapBook 笔记知识管理扩展
ScribeFire Next 写blog扩展
SQLite Manager sqlite客户端扩增
WebMail Notifier 邮箱扩展

,