手机版

mysql技巧:执行批量删除、查询和索引操作

时间:2021-08-03 来源:互联网 编辑:宝哥软件园 浏览:

类型:数据库类大小:1.7M语言:英语评分:6.6标签页:立即下载mysql执行批量删除

执行批量删除时注意使用上限

因为如果不使用limit,删除大量数据很可能会导致死锁

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

PS:更新删除时最好加限制1,防止误操作

优化、分析、检查和维修维护操作

在插入、更新和删除优化数据时,不可避免地会迁移和分页一些数据,然后出现一些碎片。随着时间的推移,碎片会不断积累,影响性能,这就需要DBA定期优化数据库,减少碎片。因此,请使用优化命令。

例如,对MyisAM表的操作:优化表表名

InnoDB表不支持优化操作,否则会提示“表不支持优化,正在进行重新创建分析”。当然,您也可以使用命令:alter table one type=innodb取代。

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

分析表表名

检查表或视图中是否有错误,这对MyISAM和InnoDB存储引擎的表很有用。检查MyISAM存储引擎的表也会更新关键字统计信息

修复优化需要有足够的硬盘空间,否则可能会破坏表,使其无法运行,所以需要使用修复。请注意,INNODB不支持修复操作

生成无序id

方法:

使用默认表格

例如id和toid的映射

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

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

当您想要获取新的toid时,取出指针值,加1,然后转到预置表获取该toid

查询和索引

查询时,必须考虑如何命中索引

例如,有几个技巧:

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

其中mycol * 2 4

2不要在相似模式的开头使用通配符%

其中col_name类似于“%string%”

不如

其中col_name像“字符串%”

3避免过度使用mysql自动转换类型,不得使用索引

诸如

从mytbl中选择*其中str_col=4

但是str_col是一个字符串,这实际上意味着字符串的改变

应该使用

从mytbl中选择*其中str_col='4 '

如果索引比表大,不需要建立索引吗

索引按顺序排列。因此,即使索引比表大,也可以加快查询速度。

当然,如果索引比表大,第一个任务必须是检查索引建立的地方是否有问题

如何选择Char和varchar

Char是固定长度的,varchar是可变长度的。varchar不仅设置数据,还使用一两个字节来定义数据的实际长度。

Char将填充下一个空行中的空字符串

Myisam建议使用char。myisam中有一个静态表的概念。使用char比使用varchar更有效。

Innodb推荐varchar。主要是从节省空间方面

多个时间戳设置默认值

表中最多有一个字段可以用CURRENT_TIMESTAMP设置

对于以下要求:

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

1插入时,sql的两个字段都没有设置,但会设置为当前时间

2更新时,sql中的两个字段都没有设置,updatetime将更改为当前时间

这种需求是不可能的。因为您无法避免在两个字段上设置CURRENT _时间戳。

有几种解决方案:

1使用触发器。

2将第一个时间戳的默认值设置为0

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

查询数据表的行数和容量

不要使用选择计数(*)

使用“表名”这样的显示表状态,但是innodb将浮动大约50%,这是一个估计值

自动增量的设置

1不要设置为int,设置为unsinged int,auto_increment的范围根据类型确定

2 auto_increment数据列必须有索引并确保唯一性。

3自动增量必须具有非空属性

4可以使用自动增量

更新表

哪种类型的mysql字段用于表示时间

指示时间可以与时间戳和日期时间一起使用

日期时间可以指示从0000-00-00: 00: 00到9999-12-31:0033600:00的时间

时间戳指示的时间是从1970年08: 00: 01到2038年1月19日11: 14: 07

时间戳比日期时间占用的空间少,可以设置时区和其他功能,所以在可以使用时间戳的地方尽量使用时间戳

您也可以使用时间戳进行设置

[更新当前时间戳时]

[默认当前时间戳]

Myisam和innodb支持外键

Myisam不支持外键,innodb支持;

如果使用命令创建外键来操作myisam的表,操作不会返回失败,但它是在没有外键关联的情况下建立的。

向字段添加和减去语句

经常需要增加和减少一个字段

更新表集a=a 1

这是对的

但是如果你这样设置:

从表中选择一个

取出数据后,a为1

更新表集a=2

这将导致如果在选择和更新之间有其他事务来修改此字段,最终设置可能会出错。

版权声明:mysql技巧:执行批量删除、查询和索引操作是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。