【MySQL】经典⾯试题:⼀条SQL语句执⾏得很慢的原因有哪些
⽂章⽬录
contextmenustrip控件右击事件⾯试的时候就是抻,说得越详细越好。
所以得分类讨论。
1 偶尔很慢
1.1 数据库在刷新脏页
往数据库更新数据(增、删、改)的时候,数据库会在内存中把对应的记录更新,但是更新之后,并不会马上同步持久化到磁盘中去,⽽是把这些更新的记录写⼊到redo log⽇记中去,等到空闲时,再通过⽇记把数据同步到磁盘中去。
1.2 执⾏的时候遇到锁
表被加锁,或者⾏被加锁。
可以⽤show processlist命令查看是否在等待锁。
2 ⼀直很慢mysql面试题sql
2.1 没有使⽤到索引
表结构如下:
mysql>CREATE TABLE`t`(
`id`int(11)NOT NULL,
`c`int(11)DEFAULT NULL,
`d`int(11)DEFAULT NULL,
PRIMARY KEY(`id`)18个点三排一笔连完 不能重复
)ENGINE=InnoDB;
2.1.1 字段没有索引
开启docker命令
此时字段c没有索引,假设要查如下的记录,则需要全表扫描。
select*from t where100<c and c <100000;
2.1.2 字段有索引,但是sql语句没有使⽤
假设字段c现在已经加上了索引,但是使⽤如下语句查询,系统仍然会全表扫描。
select*from t where c -1=1000;
正确的语句操作应该是:
select*from t where c =1000+1;
2.1.3 函数操作导致没有⽤上索引
同上所⽰,对字段进⾏了函数操作,导致没有⽤上索引
我的世界notch头部select*from t where pow(c,2)=1000;
二叉树的双序遍历2.2 数据库选错了索引
例如,进⾏如下记录的查,字段c有索引。
补充⼀下。主键索引,存放的值是整⾏字段的数据。⾮主键索引,存放的是主键字段的值。
select*from t where100< c and c <100000;
因为字段c不是主键,如果⾛c字段的索引的话,最后会查询到对应主键的值,然后根据主键的值,⾛主键索引,查询到整⾏数据返回。即,就算字段c上有索引,系统也并不⼀定会⾛c这个字段上的索引,⽽是有可能扫描全表,出符合要求的字段。
参考资料

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。