MySQL索引分析和优化(转) 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记 录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如 果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找 记录至少要比顺序扫描记录快100倍,个人感觉快100倍有点夸张。 假设我们创建了一 个名为people的表 CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL ); 创建完后,我 们随机把1000个不同name值插入到people表。 可以看到,在数据文件中name列没有任何明确的次序。如果我们创建了name列的索 引,MySQL将在索引中排序name列。 对于索引中的每一 项,MySQL在内部为它保存一个数据文件中实际记录所在位置的“指针”。因此,如果我们要查找name等于“Mike”记录的 peopleid(SQL命令为“SELECT peopleid FROM people WHERE name=’Mike’;”),MySQL能够在name的索引中查找“Mike”值,然后直接转到 数据文件中相应的行,准确地返回该行的 peopleid(999)。在这个过程中,MySQL只需处理一个行就可以返回结果。如果没有“name”列的索引, MySQL要扫描数据文件中的所 有记录,即1000个记录!显然,需要MySQL处理的记录数量越少,则它完成任务的速度就越快。 索引的类型 普通索引 这是最基本的索引类型,而且它没 有唯一性之类的限制。普通索引可以通过以下几种方式创建 创建索引,例如CREATE INDEX <索引的名字>; ON tablename (列的列表); 修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表); 创建表的时候指定索引,例如CREATE TABLE tablename [...]
字符描述: \:将下一个字符标记为特殊字符或字面值。例如”n”与字符”n”匹配。”\n”与换行符匹配。序列”\\”与”\”匹配,”\(“与”(“匹配。 ^ :匹配输入的开始位置。 $ :匹配输入的结尾。 * :匹配前一个字符零次或几次。例如,”zo*”可以匹配”z”、”zoo”。 + :匹配前一个字符一次或多次。例如,”zo+”可以匹配”zoo”,但不匹配”z”。 ? :匹配前一个字符零次或一次。例如,”a?ve?”可以匹配”never”中的”ve”。 .: 匹配换行符以外的任何字符。 (pattern) 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matches 集合中使用 Item [0]…[n]取得。如果要匹配括号字符(和 ),可使用”\(” 或 “\)”。 x|y:匹配 x 或 y。例如 “z|food” 可匹配 “z” 或 “food”。”(z|f)ood” 匹配 “zoo” 或 “food”。 {n}:n 为非负的整数。匹配恰好n次。例如,”o{2}” 不能与 “Bob 中的 “o” 匹配,但是可以与”foooood”中的前两个o匹配。 {n,} :n 为非负的整数。匹配至少n次。例如,”o{2,}”不匹配”Bob”中的”o”,但是匹配”foooood”中所有的o。”o{1,}”等价 于”o+”。”o{0,}”等价于”o*”。 {n,m} :m 和 n 为非负的整数。匹配至少 n 次,至多 m [...]
function gb2312(key) { var r = “”; for(var i=0;i<key.length;i++) { var t = key.charCodeAt(i); if(t>=0x4e00 || t==0x300A || t==0x300B) { try { execScript(“ascCode=hex(asc(\”"+key.charAt(i)+”\”))”, “vbscript”); r += ascCode.replace(/(.{2})/g, “%$1″); } catch(e) {} } else{r += escape(key.charAt(i))} } return r; }
模式修正符 模式修正符 — 解说正则表达式模式中使用的修正符 说明 下面列出了当前在 PCRE 中可能使用的修正符。括号中是这些修正符的内部 PCRE 名。修正符中的空格和换行被忽略,其它字符会导致错误。 i (PCRE_CASELESS) 如果设定此修正符,模式中的字符将同时匹配大小写字母。 m(PCRE_MULTILINE) 默 认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始”元字符(^)仅仅匹配字符串的起始,“行结束”元字符($)仅 仅匹配字符串的结束,或者最后一个字符是换行符时其前面(除非设定了 D 修正符)。这和 Perl 是一样的。 当设定了此修正符,“行 起始”和“行结束”除了匹配整个字符串开头和结束外,还分别匹配其中的换行符的之后和之前。这和 Perl 的 /m 修正符是等效的。如果目标字符串中没有“\n”字符或者模式中没有 ^ 或 $,则设定此修正符没有任何效果。 s(PCRE_DOTALL) 如 果设定了此修正符,模式中的圆点元字符(.)匹配所有的字符,包括换行符。没有此设定的话,则不包括换行符。这和 Perl 的 /s 修正符是等效的。排除字符类例如 [^a] 总是匹配换行符的,无论是否设定了此修正符。 x(PCRE_EXTENDED) 如果 设定了此修正符,模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两头,也都被忽略。这和 Perl 的 /x 修正符是等效的,使得可以在复杂的模式中加入注释。然而注意,这仅适用于数据字符。空白字符可能永远不会出现于模式中的特殊字符序列,例如引入条件子模式 的序列 (?( 中间。 e 如果设定了此修正符,preg_replace() 在替换字符串中对逆向引用作正常的替换,将其作为 [...]
以下内容转载自网络。
近期研究一些突破验证码方面的知识,记录下来。一方面算是对这几天学习知识的总结帮助自己理解;另一方面希望对研究 这方面的技术同学有所帮助;另外也希望引起网站管理者的注意,在提供验证码时多些考虑进去。由于刚刚接触这方面的知识,理解比较浅显,有错误再所难免,欢 迎拍砖。
VMware 相关 设备管理器看到键盘那项里是一个惊叹号! 查看详细信息: 设备管理器显示:代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备 删除这个设备,在扫描硬件更新,找到后依然是这个提示:代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备,真是郁闷了。 google一下得到下面类似的解决方法: 打开注册表regedit, 定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318} 删除UpperFilters项 卸载设备,重新启动。 然后设备管理器里变成:代码 10:该设备无法启动。 定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318} 添加字符串UpperFilters项,内容是kbdclass 卸载设备,重新启动。 实际应用了一下,果然好用,问题终于解决!其实出现类似的情况,不仅仅是键盘,其他外设出现的几率也有,比如光驱,不过解决方法和这个大致一样。 Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}这里面的{4D36E96B-E325-11CE- BFC1-08002BE10318}这个表示是键盘,注册表里也有详细描述,Class下有很多这样的字符,打开一看就明白表示什么了 PS:(这段话是问题解决者所说) 其实这个问题应该是UpperFilters的问题,这个内容来自dxdiag程序,输入标签下的“与输入相关的设备”里的PS/2设备,高层筛选程序。注册表里UpperFilters这个值和这个高层筛选程序一样。 PS:虽然设备管理器有问题,但是dxdiag程序没有发现错误,很奇怪。
在 CentOS 5.4 下编译安装MySQL时出错: /bin/rm: cannot remove `libtoolt’: No such file or directory 网上搜寻后,解决问题。具体方法是: 在执行./configure 之前,先执行: # autoreconf –force –install # libtoolize –automake –force # automake –force –add-missing # ./configure –prefix=/usr/local/mysql/ –datadir=/var/lib/mysql
You should recreate aclocal.m4 with macros from libtool 2.2 错误 libtool 版本问题 cp /usr/bin/libtool . 然后再 make