mysql群删除记录查询_mysql那些招:执行大批量删除、查询和索引等操作
类型:数据库类大小:1.7M语言:英文 评分:6.6
标签:
立即下载
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那些招:执行大批量删除、查询和索引等操作相关推荐
- mysql 大批量数据查询_mysql 处理 多条件 大批量数据 查询
2013-04-27 回答 在我们使用mysql数据库时,比较常用也是查询,包括基本查询,关联查询,条件查询等等,对于同一个操作,sql语句的实现有很多种写法,但是不同的写法查询的性能可能会有很大的差 ...
- mysql如何批量删除索引_mysql执行大批量删除、查询和索引等操作教程
mysql执行大批量删除 执行大批量删除的时候注意要使用上limit 因为如果不用limit,删除大量数据很有可能造成死锁 如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数 ...
- mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?
据群友面试反馈,整理了3道MySQL面试题,对很多人可能是小菜一碟,对这些熟悉,有更好的理解的话,可以留言补充,不断完善我们的题库.MySQL查询字段区不区分大小写? MySQL innodb的事务与 ...
- 易语言mysql删除记录_511遇见易语言教程数据库-删除
本节课示范的命令有: 删除().是否删除().彻底删除().恢复删除().清除() 删除() 注意:此命令并不实际删除记录,仅仅只加上删除标记,记录依旧存在并可以读写.成功返回真,失败返回假. 数&l ...
- mysql 按月分表的查询_mysql按月分表, 组合查询
每个月月底最后一天建好下个月的空表 或每年底建1到12月的空表 , table_201901,table_201902,table_201903 增加记录不需要修改,insert到当月对应表就好了. ...
- mysql 8.0 新特性 统计直方图 优化执行计划SQL查询
| 概览 MySQL8.0实现了统计直方图.利用直方图,用户可以对一张表的一列做数据分布的统计,特别是针对没有索引的字段.这可以帮助查询优化器找到更优的执行计划.统计直方图的主要使用场景是用来计算字 ...
- mysql 命令行 结束编辑_MySql命令行执行多行命令编辑时非常有用的命令
在MySql命令行下进行多行命令编辑是很正常的一个操作,但有的时候,我们在执行多行命令编辑的时候,难免会有各种失误,一旦到此时,我们往往不得其法,其实了解一下MySql命令行的一些参数和提示的信息将会 ...
- mysql 删除记录代码_mysql 删除记录时报错
在sql命令行,删除一条记录时,发现一个很奇怪的错误 下面的语句是可以正常执行的: delete from t_mid_test_convention where convention_id=33; ...
- mysql怎么查找删除重复数据_Mysql中如何查找并删除重复数据
考试系统中做了一个用户导入试题功能,导致用户导入了很多重复的试题,我需要查询及删除一下重复的记录,于是有了这篇文章. (一)单个字段 1.查找表中多余的重复记录,根据(question_title)字 ...
最新文章
- 零基础小白如何学习好UI设计
- linux 模拟生成 CAN 设备
- php mysql 学习,php+mysql完全学习手册源码
- 织梦dedecms dede plus文件作用介绍及安全设置
- 《云计算揭秘企业实施云计算的核心问题》——导读
- php各种加密特征,php 开发中加密的几种方法总结
- 二叉查找树--插入、删除、查找
- 登录linux系统设置默认目录
- 开启Hive的本地模式
- VUE ---- Windows7环境下安装
- 无线通信基础(一):无线网络演进
- html加页面脚注,javascript – 打印HTML每页脚注
- 高效率完成一次接入80个手游渠道SDK——游戏接入聚合SDK服务端篇
- frida 挂钩_您必须知道的预提交挂钩
- 网吧收银费用计算的对象及算法设计
- vue mvc与mvvm
- typora实现上划线等操作
- R语言绘图样式设置(符号、线条、颜色、文本属性)
- excel计算二元线性回归_分享一个用用Excel做回归分析
- 微信小程序动态添加view
热门文章
- win8换成linux桌面,Ubuntu/Linux Mint分分钟变Win8风
- linux怎么监控守护进程,linux shell脚本守护进程监控svn服务
- |9 其他(linux特定的), 用来存放内核例行程序的文档.,Linux下的帮助命令
- 字符串删除首尾_[LeetCode] 459. 重复的子字符串
- CTF--misc 零宽度字符隐写
- 攻防世界-REverse-tt3441810(超简单秒懂)
- python中 5个带key内置函数
- python 超时重试方法
- Python | 5分钟搞定 Python3 元组
- Php中方法作用域,PHP 函数(下):匿名函数和作用域