mysql执行大批量删除

执行大批量删除的时候注意要使用上limit

因为如果不用limit,删除大量数据很有可能造成死锁

如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数据库

ps: 平时update和delete的时候最好也加上limit 1 来防止误操作

optimize、Analyze、check、repair维护操作

optimize 数据在插入,更新,删除的时候难免一些数据迁移,分页,之后就出现一些碎片,久而久之碎片积累起来影响性能,这就需要DBA定期的优化数据库减少碎片,这就通过optimize命令。

如对MyisAM表操作:optimize table 表名

对于InnoDB表是不支持optimize操作,否则提示“Table does not support optimize, doing recreate + analyze instead”,当然也可以通过命令:alter table one type=innodb; 来替代。

Analyze 用来分析和存储表的关键字的分布,使得系统获得准确的统计信息,影响 SQL 的执行计划的生成。对于数据基本没有发生变化的表,是不需要经常进行表分析的。但是如果表的数据量变化很明显,用户感觉实际的执行计划和预期的执行计划不 同的时候,执行一次表分析可能有助于产生预期的执行计划。

Analyze table 表名

Check检查表或者视图是否存在错误,对 MyISAM 和 InnoDB 存储引擎的表有作用。对于 MyISAM 存储引擎的表进行表检查,也会同时更新关键字统计数据

Repair optimize需要有足够的硬盘空间,否则可能会破坏表,导致不能操作,那就要用上repair,注意INNODB不支持repair操作

生成乱序的id

方法:

使用预设表

比如id和toid的映射

其中id是固定的,toid是随机的。

然后在redis或memcache中记录一个指针值,指向id

当要获取一个新toid的时候,取出指针值,加1,然后去预设表中获取toid

查询和索引

查询的时候必须要考虑到如何命中索引

比如有几个小招:

1 不要在表达式中使用索引列

where mycol *2 < 4

2 不要在like模式的开始位置使用通配符%

where col_name like ‘%string%’

不如

where col_name like ‘string%’

3 避免过多使用mysql自动转换类型,有可能无法用到index

比如

select * from mytbl where str_col=4

但是str_col为字符串,这里其实就隐含了字符串变化

应该使用

select * from mytbl where str_col=’4’

索引比表还大就不需要建立索引了吗

索引是按照顺序排列的。所以即使索引比表大,也是可以加快查询速度的。

当然如果索引比表还大首要的任务必须是检查下索引建立地是否有问题

Char和varchar如何选择

char是定长,varchar变长

varchar除了设置了数据之外,还多使用1两个字节定义了数据实际长度。

char会在后面空余的行填充上空字符串

myisam建议使用char。myisam中有个静态表的概念。使用char比使用varchar的查询效率高很多。

innodb建议使用varchar。主要是从节省空间的方面考虑

多个TimeStamp设置默认值

一个表中至多只能有一个字段设置CURRENT_TIMESTAMP

对于下面的需求:

一个表中,有两个字段,createtime和updatetime。

1 当insert的时候,sql两个字段都不设置,会设置为当前的时间

2 当update的时候,sql中两个字段都不设置,updatetime会变更为当前的时间

这样的需求是做不到的。因为你无法避免在两个字段上设置CURRENT_TIMESTAMP

解决办法有几个:

1 使用触发器。

2 将第一个timestamp的default设置为0

3 老老实实在sql语句中使用时间戳。

查询数据表有多少行,多少容量

不要使用select count(*)

使用show table status like ‘table_name’  但是innodb的话会有50%左右的浮动,是个预估值

AUTO_INCREMENT的设置

1 不要设置为int,请设置为unsinged int,auto_increment的范围是根据类型来判定的

2 auto_increment数据列必须要有索引,并且保证唯一性。

3 auto_increment必须有NOT NULL属性

4 auto_increment可以使用

UPDATE table SET seq = LAST_INSERT_ID(seq -1)

mysql的表示时间的字段用什么类型

表示时间可以使用timestamp和datetime来使用

datetime表示的时间可以从0000-00-00:00:00 到9999-12-31:00:00:00

timestamp表示的时间为1970-01-01 08:00:01到2038-01-19 11:14:07

timestamp占用的空间比datetime少,且可以设置时区等功能,所以能使用timestamp的地方尽量使用timestamp

使用timestamp还可以设置

[ON UPDATE CURRENT_TIMESTAMP]

[DEFAULT CURRENT_TIMESTAMP]

myisam和innodb支持外键

myisam不支持外键,innodb支持;

如果你使用创建外键的命令对myisam的表操作,操作不会返回失败,但是是没有外键关联建立起来的。

对一个字段加减语句

经常有需求对一个字段加减会使用

update table set a = a+1

这样是对的

但是如果这样设置:

select a from table

取出数据后a为1

update table set a =2

这样会导致如果在select和update之间有其他事务操作修改这个字段的话,导致最后的设置可能出错。

标签

mysql如何批量删除索引_mysql执行大批量删除、查询和索引等操作教程相关推荐

  1. mysql群删除记录查询_mysql那些招:执行大批量删除、查询和索引等操作

    类型:数据库类大小:1.7M语言:英文 评分:6.6 标签: 立即下载 mysql执行大批量删除 执行大批量删除的时候注意要使用上limit 因为如果不用limit,删除大量数据很有可能造成死锁 如果 ...

  2. mysql 重复率高字段 索引_MySQL性能优化(二)索引优化

    一.选择合适的列建立索引 1.在where从句,group by从句,order by从句,on从句中出现的列(select) 2.索引字段越小越好(表每页数据才会更多,IO效率会更高) 3.离散度大 ...

  3. mysql explain 索引_MySql中Explain详解与索引最佳实践

    使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的.分析你的查询语句或是结构的性能瓶颈 下面是使用 explain 的例子: 在 select 语句之 ...

  4. mysql字段简索引_MySQL常用的一些语句,索引,字段等

    1.库相关: 建库: character set:指定编码 COLLATE:排序规则 utf8mb4_general_ci 大小写不敏感 CREATE DATABASE `test_db` defau ...

  5. MySQl中文1001无标题_Mysql中字段类型不一致导致索引无效的处理办法

    前两天有个同事算数据,写出来的sql执行很慢.那个sql也很简单,就是一个左联带条件的查询.explain之后发现,其中有一张表没有用到索引.初始以为是没有建索引,于是建上索引再试,发现问题依旧.后来 ...

  6. mysql创建联合索引_mysql如何创建多个联合索引

    mysql创建多个联合索引的方法:可以使用CREATE INDEX或ALTER TABLE语句来创建.在创建联合索引时,应该仔细考虑列的顺序. MySQL中索引规则: 1.需要加索引的字段,要在whe ...

  7. mysql in 命中索引_MySql优化-你的SQL命中索引了吗

    在项目开发中SQL是必不可少的,表索也一样.这些SQL的运行性能不知道吗?有多少是命中了索引的?命中哪个索引?索引中有哪个是无效索引?这些无效索引是否会影响系统的性能?带着这些问题我们一起来学习一下. ...

  8. mysql delete 表关联删除数据_MYSQL中delete删除多表数据与删除关联数据

    在mysql中删除数据方法有很多种,最常用的是使用delete来删除记录,下面我来介绍delete删除单条记 录与删除多表关联数据的一些简单实例. 1.delete from t1 where 条件 ...

  9. mysql只能用一个索引_mysql只会使用到一个索引的原因

    select count(1) from table1 where column1 = 1 and column2 = 'foo' and column3 = 'bar' 其中column1,colu ...

最新文章

  1. 魔兽世界服务器位面 稳定,因抗议《魔兽世界》位面技术在RP服务器中被取消
  2. 从Nature 封面文章“天机”芯片看脑科学与AI的融合
  3. 25.EXTJS 主页面的jsp
  4. 2017年安防监控中的那些核心云计算技术
  5. SpringMVC中JSONP的基本使用
  6. Python入门100题 | 第057题
  7. 配置nginx支持php
  8. add-migration Build failed.
  9. html5跨平台桌面打包,Html5到跨平台app应用
  10. Python学习札记(十三) Function3 函数参数二
  11. 计算机单招六百分好考吗,单招分数线一般多少 单招考过的几率有多少
  12. Linux系统修改环境变量PATH路径
  13. PetShop4.0的安装、设置、调试与体验(草稿)
  14. 【ST4】Java 中的模板引擎 StringTemplate
  15. 获得对摄像头的访问权
  16. tomcat 7服务器跨域问题解决
  17. 漏洞情报 | VMware Tools、VMRC 及 VMware App Volumes 本地提权漏洞
  18. Java Keytool工具简介
  19. DRP系统知识点总结
  20. python 省份排序_MySQL

热门文章

  1. c语言散列表的构造和查找,简单的哈希表实现 C语言
  2. 人脸识别9-FastDeploy人脸检测、识别、部署
  3. 电商平面设计是干嘛的?电商设计助理是干嘛的:夏雨老师
  4. LINUX初级学习笔记
  5. 重新学习Java Day01
  6. 零基础:21天搞定Python分布爬虫视频教程
  7. 用html与css实现一个下载列表
  8. 微软移动 Nokia Lumia SensorCore SDK 介绍及上手体验
  9. 打破孤岛运营,增强企业凝聚力
  10. excel自动填充长数字