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

来源:互联网 发布:网络电视直播tv版 编辑:程序博客网 时间:2024/06/08 19:56

数据库实战优化–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 tablename2. truncate tablename

同样,第一种安全,但是比较慢;第二种直接重构表、快速,但是数据无法恢复,有安全隐患

0 0
原创粉丝点击