相关疑难解决方法(0)

263
推荐指数
10
解决办法
27万
查看次数

在固定大小的字段上使用 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 与 MyISAM

我不确定这个问题的答案是对还是错,因为我认为这在很大程度上取决于情况,但为了心理锻炼,我还是继续问吧:

我的数据库中有一个 MyISAM 表,它位于我的站点的中心。围绕它创建了许多参考表,还有许多其他表直接链接到该表中的行 ID。该表大约有 260k 行,有 28 个字段,其中大部分是 varchars 和 ints。我有大约 15 个索引(数据大约 70 MiB,索引大约 80 MiB)。每天可能有数百次写入,而读取数以万计。我的数据库位于 SSD 驱动器上。

现在我的问题是;将此表更改为 InnoDB 表是否有益?我正在努力扩展我的系统以包括 API 流量,这意味着该表甚至会被查询更多,我想确保一切运行尽可能顺利。因此,我有点倾向于将其转换为 InnoDB。但是,由于该表需要许多索引,我认为 MyISAM 可能会更有效地工作。谁能帮我下定决心?提前致谢1

编辑:(由 jcolebrand 从评论中添加)

我很久以前就添加了索引,并且我对 PHP 代码库进行了一些更改,因此可能有些索引已经过时,但总体而言;是的,它们都被使用了。我在表上运行了许多不同类型的查询。不同的查询,不同的索引。但是我在这里的主要问题不涉及表读取性能,而是它如何处理许多索引。InnoDB 索引与数据一起“离开”/存储,而不是 MyISAM 的密钥文件原则。我只是担心这可能会导致足够的性能下降不会超过表锁定问题。

mysql innodb myisam index

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

针对这些项目需求,选择 MyISAM 而不是 InnoDB;和长期选择

很抱歉这篇很长的帖子,但我必须提供尽可能多的信息,以使这个非常模糊的问题更加具体。

我的项目的目标是让用户搜索各种产品的(巨大)数据库。

  • 每个产品都存在于一个类别下。
  • 每个产品将有 10 到 100 个“规格”或“功能”,用户将通过这些“规格”或“功能”进行搜索。

最常见的用例是:

  1. 用户点击一个类别;然后根据需要单击各种子类别。
  2. 用户从 1 或 2 个条件开始并搜索产品。
  3. 然后,用户不断向搜索添加更多条件以缩小产品范围。

我有三个主要表“产品”、“功能枚举”和“功能”。让数据输入用户为产品即时创建新的“功能”非常重要 - 因此我使用 EAV(反)模式。

以下是表的结构:

'products'
    ID(PK), TITLE, CATEGORY
    (Indexed by CATEGORY)
'features_enum'
    ID(PK), TITLE
'features'
    P_ID, F_ID, VAL
    (Indexed by P_ID and then F_ID)
Run Code Online (Sandbox Code Playgroud)

我的主要搜索查询的示例格式:

SELECT
  p.ID,
  p.TITLE PROD_TITLE,
  fe.TITLE FEATURE_TITLE,
  f.VAL
FROM
  products p, features f, features_enum fe
WHERE
  p.CATEGORY = 57 AND
  p.ID = f.P_ID AND
  f.F_ID = fe.ID AND
  (
    (f.F_ID  = 1 AND f.VAL = 'Val1') AND
    (f.F_ID  = …
Run Code Online (Sandbox Code Playgroud)

mysql innodb myisam database-design

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

InnoDB 引擎是否跟上内存引擎的速度?

我正在探索 MySQL 5.5.18 版中不同数据库引擎的效率,以查看哪个最适合与 500 万行数据集的范围查询一起使用:

SELECT P.col1, P.col2, P.col3, P.col4, P.col5, P.col6, P.col7, P.col8, P.col9
 , P.col10, P.col10 * R.col3 as 'combi' 
FROM PRODUCT P INNER JOIN RATE R ON R.col2 = P.col2 
WHERE P.col3 = 'y' 
 AND P.col4 >= 1000 
 AND P.col5 >= 5 
 AND P.col6 BETWEEN 10 AND 100 
 AND P.col7 >= 0 
 AND P.col8 >= 7 
 AND P.col9 >= NOW() 
 AND P.col10 * R.col3 BETWEEN 50 AND 80
ORDER BY P.col8 DESC LIMIT 100;
Run Code Online (Sandbox Code Playgroud)

基于对Stackoverflow 的 …

mysql innodb performance memory

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