您的位置:首页 > 数据库

数据库实战优化--Duplicate,效率

2015-09-24 19:54 429 查看

数据库实战优化–Duplicate,效率

php1>. Duplicate的问题:

如果mysql设置了主键或unique索引,或者查询时检索到的内容,暂时我遇到的一些mysql的默认duplicate的规则是:

1)首尾空格去除再匹配;

2)忽略大小写;

3)utf-8,其他外来语(比如法语之类的与相应英语字母匹配),eg:

ÀÁÂÃÄÅÆàáâãäåæÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñÞßÿý 匹配

aaaaaaaaaaaaaaoooooooooooooeeeeeeeeecceiiiiiiiiuuuuuuuunntsyy

如果我们需要精确匹配,解决办法:

将要匹配的字段或者整个表设为binary的:

eg:创建表的SQL语句

keyword varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

这样会以二进制来精确匹配, 只要其二进制码不一样就会视为不一样

php2>. 关于速度:

1)多条插入:

分别插入

insert into tablename (field) values ("a")
insert into tablename (field) values ("b")


整合版

insert into tablename (field) values ("a"), ("b")


第一种时间主要消耗在,处理数据库的连接和操作上,而整合以后只有一次操作,速度能快1~2个量级,网上有人做过具体的速度比对试验,可以去搜一下,如果实在需要逐条插入,我们也可以用事物操作:

优点(整合版或事物版):快

缺点(整合版或事物版):全或无,导致容错性略差,若代码不严谨,容易全部操作失效,有时需要较大内存开销

需要注意:mysql默认SQL语句长度为1M,折算后简单数据能一次插入2~3万条,若我们插入的量大,需要修改my.ini中的设置,比如修改为10M

max_allowed_packet = 10M


2)删除:

整表删除的话,两种命令:

1. delete from tablename
2. truncate tablename


同样,第一种安全,但是比较慢;第二种直接重构表、快速,但是数据无法恢复,有安全隐患
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: