MyISAM 如何比 InnoDB“更快”,如果
我有一个大约 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) 我不确定这个问题的答案是对还是错,因为我认为这在很大程度上取决于情况,但为了心理锻炼,我还是继续问吧:
我的数据库中有一个 MyISAM 表,它位于我的站点的中心。围绕它创建了许多参考表,还有许多其他表直接链接到该表中的行 ID。该表大约有 260k 行,有 28 个字段,其中大部分是 varchars 和 ints。我有大约 15 个索引(数据大约 70 MiB,索引大约 80 MiB)。每天可能有数百次写入,而读取数以万计。我的数据库位于 SSD 驱动器上。
现在我的问题是;将此表更改为 InnoDB 表是否有益?我正在努力扩展我的系统以包括 API 流量,这意味着该表甚至会被查询更多,我想确保一切运行尽可能顺利。因此,我有点倾向于将其转换为 InnoDB。但是,由于该表需要许多索引,我认为 MyISAM 可能会更有效地工作。谁能帮我下定决心?提前致谢1
我很久以前就添加了索引,并且我对 PHP 代码库进行了一些更改,因此可能有些索引已经过时,但总体而言;是的,它们都被使用了。我在表上运行了许多不同类型的查询。不同的查询,不同的索引。但是我在这里的主要问题不涉及表读取性能,而是它如何处理许多索引。InnoDB 索引与数据一起“离开”/存储,而不是 MyISAM 的密钥文件原则。我只是担心这可能会导致足够的性能下降不会超过表锁定问题。
我们有 14 GB 的 CSV,总计 1.38 亿行。我首先使用 InnoDB 将其导入到 MySQL 表中,然后使用 MyISAM 再次尝试。在这两种情况下,对主键(只是一个自动递增的 int)的简单 SELECT 需要 6-7 秒,尽管 MyISAM 有时在 5-6 秒时快一点。
我们只需要写一次数据,我一直在使用mysqlimport。考虑到这一点,如何提高查询速度?
...我们有 2 演出 RAM 并且一切都是一张表,这毫无价值(并且由于查询的性质,它必须保持这种状态)。考虑到硬件,这是我可以期待的最佳性能吗?或者还有什么我应该尝试的,比如压缩?或者真的,我需要更多的内存?
我有以下问题:我正在设计带有几十个小型查找表的 Web 应用程序:这些表通常包含三列(ID、名称、描述)和几行(大多数少于 50,最大约为 450)。
这些查找表预计很少更改(它们来自标准,几年更改一次)并且仅用于:
SELECT
99% 的情况下,这些表上只会有语句,但会有相当多的语句。
我想知道,使用哪种数据库引擎最有效?
以下是我的考虑:
记忆
- 亲:非常快
- 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 ×7
myisam ×6
innodb ×5
hardware ×1
index ×1
mysql-5.5 ×1
nosql ×1
optimization ×1
performance ×1