很抱歉这篇很长的帖子,但我必须提供尽可能多的信息,以使这个非常模糊的问题更加具体。
我的项目的目标是让用户搜索各种产品的(巨大)数据库。
最常见的用例是:
我有三个主要表“产品”、“功能枚举”和“功能”。让数据输入用户为产品即时创建新的“功能”非常重要 - 因此我使用 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) 我有以下问题:我正在设计带有几十个小型查找表的 Web 应用程序:这些表通常包含三列(ID、名称、描述)和几行(大多数少于 50,最大约为 450)。
这些查找表预计很少更改(它们来自标准,几年更改一次)并且仅用于:
SELECT99% 的情况下,这些表上只会有语句,但会有相当多的语句。
我想知道,使用哪种数据库引擎最有效?
以下是我的考虑:
记忆
- 亲:非常快
- con:如果服务器崩溃,所有数据都丢失,需要重新创建
- con:不支持外键
压缩的 MyISAM
- 亲:快
- con:不支持外键
数据库
- 亲:外键支持
我想问的是,使用与InnoDB不同的东西是否会有显着的优势- 性能方面
谢谢,兹比内克
周围有一些炒作:HandlerSocket
似乎更快,nosql 访问 MySQL 数据变得越来越可取。Percona Server 现在内置了 HandlerSocket。
我的问题是,绕过 MySQL 的 libmysqld 层以利用 HandlerSocket 插件的生产用例是什么?您是否将其部署到生产环境中?
我需要对 mysql 服务器进行性能调整并需要帮助。
我有一个专用于 MySQL 的 16G 服务器,其中有 1 个 MyISAM 表,其中大约有 200 万行,可以获取大量流量。同一个数据库上还有大约 100 个其他 innodb 表。MyISAM 表几乎是只读的,用户使用它进行搜索。
服务器的 max_connection 值为 800,在大约 300 个并发用户的负载测试下,查询时间开始显着增加。在没有负载的情况下,查询需要大约 500 毫秒才能运行。
目标是显着提高 MyISAM 表上的搜索性能。
表的大小(以 MB 为单位):
data_size index_size total engine
8991 6920 15911 InnoDB
1110 718 1829 MyISAM
Run Code Online (Sandbox Code Playgroud)
以下是我的设置:
connect_timeout 10
innodb_additional_mem_pool_size 24117248
innodb_buffer_pool_size 12G
innodb_commit_concurrency 0
innodb_flush_log_at_trx_commit 1
innodb_log_buffer_size 11534336
innodb_log_file_size 449839104
innodb_open_files 300
innodb_thread_concurrency 8
innodb_thread_sleep_delay 10000
join_buffer_size 131072
key_buffer_size 2147483648
key_cache_age_threshold 300
key_cache_block_size 1024
key_cache_division_limit 100
max_allowed_packet 134217728
max_connections 800 …Run Code Online (Sandbox Code Playgroud) 我有一个继承的 MySQL 数据库的问题。mysqld 有时会使用高达 2300% 的 CPU。唯一的解决方案是服务 mysql stop 并在表上运行 myisamchk -r。修复索引后,我启动 MySQL,一切正常。
关于永久解决方案的任何想法?
编辑(来自评论):
使用 5.5.29-0ubuntu0.12.04.2-log
key_buffer = 16M max_allowed_packet = 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 | …