zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

遇上数据瓶颈,你还敢不建索引揭秘MySQL不建索引的25个坏处(mysql不建索引坏处)

mysql索引数据 25 揭秘 瓶颈 遇上 坏处
2023-06-13 09:12:14 时间

遇上数据瓶颈,你还敢不建索引?——揭秘MySQL不建索引的25个坏处

在MySQL中,索引是一种用于查找数据的数据结构,可以提高查询速度,降低系统的负载。然而,许多开发者并不重视索引的建立,在数据量较小的情况下可能并不会对性能造成太大影响。但是,随着数据量的不断增大,没有索引的表将会变得越来越糟糕,从而导致性能瓶颈和其他问题。

以下是25个不建立索引的问题:

1.查询速度慢

2.增加服务器负载

3.表占用更多的磁盘空间

4.更多的磁盘I/O操作

5.缩短可用磁盘寿命

6.会导致内存交换

7.会导致文件缓存命中率下降

8.会带来锁竞争问题

9.占用更多的TCP/IP连接

10.占用更多的CPU时间

11.占用更多的内存

12.可能导致数据意外崩溃

13.可能导致数据丢失

14.可能导致查询结果错误

15.可能导致数据被篡改

16.会导致更新操作变慢

17.会导致插入操作变慢

18.会导致删除操作变慢

19.可能导致锁定表

20.可能导致长时间等待锁

21.可能导致键冲突

22.可能导致事务失败

23.可能导致严重的数据库损坏

24.可能导致系统崩溃

25.可能导致恶意攻击

以上的问题是非常严重的。如果MySQL数据库没有索引或者索引使用不当,我们将会遇到各种各样的问题,并可能难以恢复。

下面实际操作演练:

我们创建一个简单的表:

CREATE TABLE `test` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900__ci;

然后,我们将向表中插入一些数据:

INSERT INTO `test` (`name`) VALUES

( 张三 ),

( 李四 ),

( 王五 ),

( 赵六 ),

( 田七 ),

( 秦八 ),

( 周九 );

现在,我们来查询表中的数据:

SELECT * FROM `test` WHERE `name` = 张三

我们可以看到,查询非常快,并且没有任何问题。

但是,如果我们将表中的数据扩大到100万行:

DELIMITER ;;

CREATE PROCEDURE seed_fake_data()

BEGIN

DECLARE i INT DEFAULT 1;

WHILE i

INSERT INTO `test` (`name`) VALUES (CONCAT( User , i));

SET i = i + 1;

END WHILE;

END;;

DELIMITER ;

CALL seed_fake_data();

现在,我们再次运行相同的查询:

SELECT * FROM `test` WHERE `name` = User 1

查询速度非常慢,并且花费了数秒的时间才能返回结果。这是由于表中没有建立索引,导致数据的扫描速度非常慢。因此,在实际的应用程序中,我们应该非常注意表的索引建立,以避免性能瓶颈。


我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 遇上数据瓶颈,你还敢不建索引揭秘MySQL不建索引的25个坏处(mysql不建索引坏处)