Questions tagged «myisam»

MyISAM是MySQL的非事务存储引擎。它提供了高速存储和检索以及全文搜索功能。此外,它是5.5之前的MySQL版本的默认存储引擎类型。


5
如何安全地更改MySQL innodb变量'innodb_log_file_size'?
因此,我对调优InnoDB相当陌生。我正在将表(如有必要)从MyIsam缓慢更改为InnoDB。我在innodb中有大约100MB,因此我将innodb_buffer_pool_size变量增加到128MB: mysql> show variables like 'innodb_buffer%'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | innodb_buffer_pool_size | 134217728 | +-------------------------+-----------+ 1 row in set (0.00 sec) 当我去更改innodb_log_file_size值时(例如,mysql的innodb配置页上的 my.cnf 注释将日志文件大小更改为缓冲区大小的25%。因此,现在,my.cnf如下所示: # innodb innodb_buffer_pool_size = 128M innodb_log_file_size = 32M 重新启动服务器时,出现以下错误: 110216 9:48:41 InnoDB:正在初始化缓冲池,大小= 128.0M 110216 9:48:41 InnoDB:已完成对缓冲池的初始化 InnoDB:错误:日志文件./ib_logfile0的大小不同0 5242880字节 InnoDB:与指定的大小不同.cnf文件0 33554432字节! 110216 9:48:41 …
105 mysql  innodb  myisam  logs 


3
为什么InnoDB将所有数据库存储在一个文件中?
MyISAM过去很方便地将每个表存储在相应的文件中。InnoDB在很多方面都取得了进步,但是我不知道为什么InnoDB将所有数据库存储在一个文件中(ibdata1默认情况下)。 我知道InnoDB将按表的各个索引文件映射文件中数据的位置,但是我不明白为什么它将所有数据混合在一个文件中。更重要的是,为什么要混合服务器上所有数据库的数据? MyISAM的一个有趣功能是可以将数据库文件夹复制/粘贴到另一台计算机上,然后使用该数据库(无转储)。


5
为什么InnoDB 100x上的简单SELECT速度比MyISAM慢?
我有一个很烦人的问题。我想使用INNODB作为我的主要数据库引擎,而放弃MyISAM,因为我需要前者使用galera-cluster来实现冗余。 我将newbb_post表复制(描述如下)到一个名为的新表中,newbb_innopost并将其更改为InnoDB。这些表当前5,390,146每个都有条目。 在新启动的数据库上运行这些选择(因此此时不涉及缓存!),该数据库会产生以下结果(省略完整的输出,请注意,我什至不要求数据库对结果进行排序): 从newbb_post中选择post.postid,post.attach作为post,而post.threadid = 51506; 。 。 | 5401593 | 0 | | 5401634 | 0 | + --------- + -------- + 设置62510行(0.13秒) 从newbb_innopost中选择post.postid,post.attach作为post,而post.threadid = 51506; 。 。 | 5397410 | 0 | | 5397883 | 0 | + --------- + -------- + 设置62510行(1分22.19秒) 0.13秒至86.19秒(!) 我想知道为什么会这样。我确实在这里阅读了有关InnoDB的Stackexchange的一些答案,并且有人建议将innodb_buffer_pool大小增加到已安装RAM的80%。这不会解决问题,对特定ID的初始查询将至少花费50倍以上的时间,并使整个Web服务器停滞不前,从而对数据库进行连接和查询。之后可能会启动缓存/缓冲区,但是此数据库中有超过100.000个线程,因此很有可能缓存将永远无法容纳要服务的所有相关查询。 上面的查询很简单(没有连接),并且使用了所有键: 从newbb_innopost解释选择post.postid,post.attach作为post在哪里post.threadid = …

6
如何尽可能快地更新MySQL单个表中的1000万行以上?
对大多数表使用MySQL 5.6和InnoDB存储引擎。InnoDB缓冲池大小为15 GB,Innodb DB +索引约为10 GB。服务器具有32GB RAM,并且正在运行Cent OS 7 x64。 我有一张大表,其中包含大约一千万条记录。 我每24小时从远程服务器获取一个更新的转储文件。该文件为csv格式。我无法控制该格式。该文件约为750 MB。我尝试将数据逐行插入MyISAM表中,这花了35分钟。 我只需要从文件中取出10-12行中的每行3个值,然后在数据库中更新它。 实现这样的最佳方法是什么? 我需要每天这样做。 当前Flow是这样的: mysqli_begin_transaction 逐行读取转储文件 逐行更新每个记录。 mysqli_commit 以上操作大约需要30-40分钟才能完成,在执行此操作的同时,还有其他更新正在进行中 超过了锁定等待超时;尝试重新启动事务 更新1 使用加载新表中的数据LOAD DATA LOCAL INFILE。在MyISAM中,花38.93 sec了7分钟5.21秒,而在InnoDB中,花了7分钟。然后我做了: UPDATE table1 t1, table2 t2 SET t1.field1 = t2.field1, t1.field2 = t2.field2, t1.field3 = t2.field3 WHERE t1.field10 = t2.field10 Query OK, …

3
表分区有何帮助?
我很难掌握表分区的优缺点。我即将开始一个有8个表的项目,其中一个将是主要数据表,其中将包含180-2.6亿条记录。由于将对表进行正确的索引,因此我正在考虑将表记录限制为2000万,这样我就必须创建9-13个表。 但是我不确定如何提高性能,因为它们将位于同一台计算机(32GB RAM)上? 我正在使用MySQL,表将是MyISAM,大表将在id字段上具有索引,并且没有进一步的复杂性,例如全文搜索等。 还请阐明表分区与数据库分区。


6
在30,000,000行表上的DELETE命令未完成
我继承了一个数据库,并希望清理并加快它的速度。我有一个表,其中包含30,000,000行,由于代表程序员的错误,其中许多行都是垃圾数据。在添加任何新的,更优化的索引之前,我已将表从MyISAM转换为InnoDB,并希望删除很多包含垃圾数据的行。 数据库是MySQL 5.0,我具有对该服务器的root访问权限。我首先通过Adminer运行这些命令,然后通过phpMyAdmin运行,结果均相同。 我正在运行的命令是, DELETE FROM `tablename` WHERE `columnname` LIKE '-%' 本质上,删除此列中以破折号开头的所有内容-。 它运行大约3-5分钟,然后当我查看进程列表时,它就消失了。 然后我跑 SELECT * FROM `tablename` WHERE `columnname` LIKE '-%' 它返回数百万行。 为什么我的删除语句没有完成? PS,我知道MySQL 5.0是过时的。我正在努力将数据库移至MySQL 5.6 w InnoDB(也许是MariaDB 10 w XtraDB),但是直到发生这种情况之前,我一直希望使用DB来解决此问题。 - 编辑已删除,请参阅我的答案。

3
频繁查询缓存失效的开销值得吗?
我目前正在使用一个MySQL数据库,在该数据库中,我们从查询缓存中看到大量无效信息,这主要是由于在许多表上执行的INSERT,DELETE和UPDATE语句数量很多。 我要确定的是,将查询缓存用于针对这些表运行的SELECT语句是否有任何好处。由于它们是如此之快地失效,在我看来,最好的办法是仅对这些表的SELECT语句使用SQL_NO_CACHE。 频繁失效的间接费用是否值得? 编辑:在下面的用户@RolandoMySQLDBA的请求下,这是MyISAM和INNODB上的信息。 创新数据库 资料大小:177.414 GB 索引大小:114.792 GB 桌子大小:292.205 GB 我的ISAM 资料大小:379.762 GB 索引大小:80.681 GB 桌子大小:460.443 GB 附加信息: 版本:5.0.85 query_cache_limit:1048576 query_cache_min_res_unit:4096 query_cache_size:104857600 query_cache_type:开启 query_cache_wlock_invalidate:关闭 innodb_buffer_pool_size:8841592832 24GB RAM


1
默认情况下,mysqldump是否导出索引?
我打得四处少许使用mysqldump,我想知道,如果它的出口指数(FULLTEXT,INDEX,...),默认情况下。我仔细阅读,发现了这个选项: --disable-keys, -K 这表明它确实确实导出了索引。但是我不想相信自己的解释,而是想确保自己理解正确(或错误;-)。谁能确认?


2
从MyISAM在线转换为InnoDB后缺少行
我们有一个相当小的数据库,我们希望将其从MyISAM转换为InnoDB。作为数据库新手,我们甚至在不关闭站点的情况下进行了转换(使用alter table)。 现在,转换已完成,似乎缺少许多间歇行。这可能是由于转换期间的操作造成的吗?还是这个问题在其他地方?
16 mysql  innodb  myisam 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.