数据库实战优化--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
同样,第一种安全,但是比较慢;第二种直接重构表、快速,但是数据无法恢复,有安全隐患
相关文章推荐
- Redis 缓存 + Spring 的集成示例
- Redis 缓存 + Spring 的集成示例
- MySQL的三种安装方式
- 查看oracle当前连接数(转)
- mysql 获取自增id的值的方法
- 实用SQL语句大全
- mysql中You can't specify target table for update in FROM clause错误 转
- mysql 常用命令总结
- 数据库隔离级别
- Solaris 10上安装Oracle 11g
- 安装配置mysql
- SQL server 索引
- 经典SQL语句大全
- Mysql安装及入门
- SQL扩展之T-SQL中的数据查询语言之统计计算
- mysql 创建event报1064
- mysql 基于时间点恢复
- SQL扩展之T-SQL中的数据查询语言之连接查询
- oracle db于,一个特定的数据字典pct miss其计算公式
- MySQL语句内求和 选择语句外的表进行查询求和