mysql

alter table tableName add(drop index)  columnName after     更新表字段

create UNIQUE_INDEX 索引name USING BTREE on  tableName(字段)         创建索引

drop table tableName  删除表

create table tablename as select * from tableName2  备份表数据

SELECT * FROM information_schema.columns WHERE column_name='app_id';   查询数据库中某个字段那个表包含

update tableName t1 inner join tableName2 t2 on 关联条件 set  where  关联两个表更新

delete from tablename  删除表数据

mysql 查看执行明细
explain
id
select_type :select查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询。
table :输出的行所引用的表。
type:联合查询所使用的类型。ype显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
possible_keys

指出MySQL能使用哪个索引在该表中找到行。如果是空的,没有相关的索引。这时要提高性能,可通过检验WHERE子句,看是否引用某些字段,或者检查字段不是适合索引。
key

显示MySQL实际决定使用的键。如果没有索引被选择,键是NULL。
key_len

显示MySQL决定使用的键长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。

ref

显示哪个字段或常数与key一起被使用。

rows

这个数表示mysql要遍历多少数据才能找到,在innodb上是不准确的。

Extra plain

如果是Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。

如果是where used,就是使用上了where限制。

如果是impossible where 表示用不着where,一般就是没查出来啥。

慎用 max 可用 order by id desc limit 1

0.先运行看看是否真的很慢,注意设置SQL_NO_CACHE
1.where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
2.explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
3.order by limit 形式的sql语句让排序的表优先查
4.了解业务方使用场景
5.加索引时参照建索引的几大原则
6.观察结果,不符合预期继续从0分析

一:

innodb 默认按照主键自增排序

myisam 默认按照物理存储顺序排序       必须养成追加写order by   ,id的习惯

批量执行会造成行锁优化为表锁, 所以生产上 sql 要分开写

执行某条sql被锁死

Lock wait timeout exceeded; try restarting transaction的异常,错误提示的意思,很明显,是因为这条语句被锁住了,所以释放这个锁

  • innodb_trx 当前运行的所有事务
  • innodb_locks 当前出现的锁
  • innodb_lock_waits 锁等待的对应关系

select * from information_schema.innodb_trx

kill 进程

show processList

原文地址:https://www.cnblogs.com/mxz1994/p/9758610.html