相关疑难解决方法(0)

在固定大小的字段上使用 CHAR 与 VARCHAR 对性能有何影响?

我有一个存储 MD5 哈希的索引列。因此,该列将始终存储 32 个字符的值。无论出于何种原因,它都是作为 varchar 而不是 char 创建的。迁移数据库以将其转换为字符是否值得?这是在带有 InnoDB 的 MySQL 5.0 中。

mysql innodb performance varchar

66
推荐指数
3
解决办法
8万
查看次数

InnoDB 或 MyISAM 哪个更快?

MyISAM 如何比 InnoDB“更快”,如果

  • MyISAM 需要为数据做磁盘读取吗?
  • InnoDB 对索引和数据使用缓冲池,而 MyISAM 只用于索引?

mysql innodb myisam storage-engine

59
推荐指数
3
解决办法
13万
查看次数

哪种 DBMS 适合超快速读取和简单数据结构?

我正在开发一种产品,作为其操作的一部分,必须跟踪大量文件/目录。这个想法是将统计信息存储在数据库中,然后在启动时为每个文件创建监视。更改的文件将排队(在数据库中)以组同步到远程数据库。它们将按优先级顺序同步,数字介于 1-10 之间。

数据库的相关资料:

  • < 100,000 个统计信息条目
  • 启动时读取整个数据库,只需要文件路径
  • 排队的文件将有一个优先级字段(不需要搜索其他任何内容)
  • 插入可能很慢

我发现了几个我认为可以工作的数据库,但我不确定哪个是最好的:

  • Redis - 将文件路径存储为键,将统计数据存储为值;队列将是一个列表
  • MongoDB - 比 Redis 更多的查询选项,但仍然很快

我认为 NoSQL 数据库将是这里的最佳解决方案,因为没有太多的关系逻辑在进行,并且总数据大小不会太大(例如 < 100 mb,接近 < 30 mb)。我确实看过 SQLite,因为它似乎很简单,可以嵌入到可安装的应用程序中。

由于这是面向最终用户的分布式应用程序而不是高负载服务器,因此数据库不必支持许多并发用户。这里的主要优先事项是找到一个模型最有意义的数据库。

那么问题来了,哪个数据库最适合这种情况?

另外,是否还有其他数据库对这样的应用程序更有意义?

database-recommendation

18
推荐指数
2
解决办法
2万
查看次数

最好的 MyISAM 和 InnoDB

由于 RAM 的限制,是否可以让 InnoDB 使用与 MyISAM 相同的索引而不是聚集索引,同时获得其并发性能的好处?

mysql innodb myisam performance index

17
推荐指数
1
解决办法
2万
查看次数

如何从 InnoDB 表中删除碎片?

我有一个包含多个表的数据库。

我想从表中删除一些记录,说记录数超过 20K 或 50K。

所有的表都是 InnoDB。并且file_per_table关闭的

当我从多个表中删除记录时,表中会出现碎片。

有没有办法消除碎片。?

4月17日更新

mysql> select TABLE_NAME, TABLE_SCHEMA, Data_free from information_schema.TABLES where TABLE_SCHEMA NOT IN ('information_schema', 'mysql') and Data_Free >0;
+-----------------+--------------+-----------+
| TABLE_NAME      | TABLE_SCHEMA | Data_free |
+-----------------+--------------+-----------+
| City            | world_innodb |   5242880 |
| City_Copy       | world_innodb |   5242880 |
| Country         | world_innodb |   5242880 |
| CountryLanguage | world_innodb |   5242880 |
| a               | world_innodb |   5242880 |
| t1              | world_innodb |   5242880 …
Run Code Online (Sandbox Code Playgroud)

mysql innodb mysql-5.5

14
推荐指数
2
解决办法
4万
查看次数

经常查询10万条记录的MySQL表

我有一个大约 100 个表的数据库来存储各种信息。

最重要的表是我们的订单表,用于存储客户订单,截至目前已超过 100000 条记录,并且还在不断增长。

该表是我们数据库中查询最多的表,用于获取实时订单仪表板、统计数据、分析等所需的各个部分信息。

我定期监视数据库,并在数据库上启用慢速查询以跟踪问题。

我每天都使用像 mysqltuner 这样的脚本来输出查询。

我还使用 mysqlsla 收集有关我们数据库中前 10 个最慢查询的信息。

sample stat
Count         : 11.48k  (30.66%)
Time          : 19.623758 s total, 1.709 ms avg, 239 µs to 2.475017 s max  (18.64%)
  95% of Time : 5.246833 s total, 481 µs avg, 239 µs to 1.095 ms max
Lock Time (s) : 14.460071 s total, 1.259 ms avg, 53 µs to 2.462555 s max  (41.38%)
  95% of Lock : 806.43 ms total, 74 µs avg, …
Run Code Online (Sandbox Code Playgroud)

mysql myisam mysql-5.5

11
推荐指数
1
解决办法
1万
查看次数

防止查询等待表级锁的方法

将客户的数据库移动到额外的服务器后,我们遇到了问题。这应该会对站点的性能产生积极的影响,但是 MyISAM 中的表锁定存在问题。(我听说过使用 InnoDB 代替 MyISAM,但我们不能在不久的将来更改引擎)。
我们可以发现它是一个更新查询,当主持人在文章站点上激活评论时执行该查询。这是过程:

  • 处理更新查询 SET status = 1 WHERE id = 5(设置索引)
  • 页面缓存文件被删除

此时整个页面变得缓慢。数据库本身忙了几分钟。我取了几次进程列表,看到大约 60 个不同选择查询的条目,它们都处于等待表级锁定的状态。

1.我不明白为什么表上的这个更新article_comments会影响表的选择语句article以等待表级锁。在 processlist 中,几乎所有等待的查询都来自该表。我已经读过更新/插入比选择更受欢迎的事实,这可能会导致此类问题,但是当评论被激活时,文章表本身不会更新,因此选择不应该等待。我误解了吗?
2. 除了更改为 InnoDB 之外,还有什么可以防止这种行为或至少是为了获得更好的平衡吗?我对在将数据库移动到新服务器之前没有出现这个问题感到非常恼火。我想有一些配置错误,但我不知道如何识别。

mysql myisam performance mysql-5.5 locking

10
推荐指数
2
解决办法
7万
查看次数

选择哪个mysql存储引擎?

我很困惑我应该选择哪个 mysql 引擎(让我们谈谈最常用的:MyISAM 和 InnoDB)。

理论说:

  • 两者都适用于 BTree 索引,但 MyISAM 也可以使用 FULLTEXT 索引。
  • InnoDB 在数据完整性方面更加严格,而 MyISAM 则较为松散。
  • InnoDB 有事务,而 MyISAM 没有。
  • InnoDB 有外键和关系约束,而 MyISAM 没有。
  • MyISAM 读取速度更快,但写入速度更慢(我不确定这个)。

当我创建一个表时,如果我想保持完整性并且我想加快通过“文本”进行搜索的查询,我应该总是牺牲一些东西吗?

如果需要,您如何决定使用哪种引擎

  • 正直 ?
  • 速度 ?
  • 约束?
  • 按文字搜索?
  • 交易?

mysql innodb myisam storage-engine full-text-search

6
推荐指数
1
解决办法
3580
查看次数

MySQL中小型查找表的最佳引擎

我有以下问题:我正在设计带有几十个小型查找表的 Web 应用程序:这些表通常包含三列(ID、名称、描述)和几行(大多数少于 50,最大约为 450)。

这些查找表预计很少更改(它们来自标准,几年更改一次)并且仅用于:

  • html select 中的填充选项
  • 加入报告中的其他记录

SELECT99% 的情况下,这些表上只会有语句,但会有相当多的语句。

我想知道,使用哪种数据库引擎最有效?

以下是我的考虑:

记忆

  • 亲:非常快
  • con:如果服务器崩溃,所有数据都丢失,需要重新创建
  • con:不支持外键

压缩的 MyISAM

  • 亲:快
  • con:不支持外键

数据库

  • 亲:外键支持

我想问的是,使用与InnoDB不同的东西是否会有显着的优势- 性能方面

谢谢,兹比内克

mysql innodb myisam storage-engine database-recommendation

6
推荐指数
1
解决办法
691
查看次数

MySQL 高 CPU 使用率(MyISAM 表索引)

我有一个继承的 MySQL 数据库的问题。mysqld 有时会使用高达 2300% 的 CPU。唯一的解决方案是服务 mysql stop 并在表上运行 myisamchk -r。修复索引后,我启动 MySQL,一切正常。

关于永久解决方案的任何想法?

编辑(来自评论):

使用 5.5.29-0ubuntu0.12.04.2-log

key_buffer = 16M 
max_allowed_pa​​cket = 16M 
线程堆栈 = 128K 
线程缓存大小 = 8 
myisam-recover = 备份 
最大连接数 = 500 
#table_cache = 512 
#thread_concurrency = 10 
query_cache_limit = 1M 
query_cache_size = 16M 
SELECT SUM(index_length) ndxsize 
FROM information_schema.tables 
WHERE engine='MyISAM'
Run Code Online (Sandbox Code Playgroud)

返回

+-----------+ 
| ndxsize |
+-----------+
| 59862016 |
+-----------+ 
SELECT SUM(data_length+index_length)/power(1024,2) datndxsize 
FROM information_schema.tables 
WHERE engine='MyISAM'
Run Code Online (Sandbox Code Playgroud)

返回:

+--------------------+ 
| 数据大小 |
+--------------------+
| 488.69915199279785 | …

mysql myisam

3
推荐指数
1
解决办法
7520
查看次数