1

我首先使用 EF 代码创建一个asp.net * MVC * 应用程序。我曾使用Sql azure作为我的数据库。但事实证明 Sql Azure 并不可靠。所以我正在考虑使用 MySql/PostgreSQL 作为数据库。

我想知道首先使用 EF 代码和 MySql/PostgreSQL 在性能方面的影响/影响。有没有人在生产中使用过这个组合或认识任何使用过它的人?

编辑
我继续在Sql Azure中获得以下异常。

SqlException: "*A transport-level error has occurred when receiving results from the server.* 
(provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"

    SqlException: *"Database 'XXXXXXXXXXXXXXXX' on server 'XXXXXXXXXXXXXXXX' is not
 currently available. Please retry the connection later.* If the problem persists, contact
 customer support, and provide them the session tracing ID of '4acac87a-bfbe-4ab1-bbb6c-4b81fb315da'.
 Login failed for user 'XXXXXXXXXXXXXXXX'."
4

1 回答 1

1

首先,您的问题似乎是网络问题,可能与您的 ISP 相关。您可能想查看远程 PostgreSQL 或 MySQL 数据库,我认为您会遇到同样的问题。

其次比较 MySQL 和 PostgreSQL 的性能是比较棘手的。一般来说,MySQL 针对 pkey 查找进行了优化,而 PostgreSQL 更普遍地针对复杂的用例进行了优化。这可能有点低级,但......

MySQL InnoDB 表基本上是 btree 索引,其中叶注释包含表数据。主键是索引的键。如果没有提供主键,则会为您创建一个。这意味着两件事:

  1. select * from my_large_table会很慢,因为不支持物理订单扫描。

  2. Select * from my_large_table where secondary_index_value = 2需要两次索引遍历,因为二级索引仅引用主键值。

相反,主键值的选择将比在 PostgreSQL 上更快,因为索引包含数据。

相比之下,PostgreSQL 在一系列堆页面中以无序的方式存储信息。索引与数据是分开的。如果要通过主键拉取,则扫描索引,然后读取找到数据的数据页,然后拉取数据。相比之下,如果你从二级索引中提取,这并没有更慢。此外,这些表的结构使得在执行 long 时可以进行顺序磁盘访问,这select * from my_large_table将导致操作系统预读缓存能够显着提高性能。

简而言之,如果您的查询只是通过主键进行无连接选择,那么 MySQL 将为您提供更好的性能。如果你有连接等,PostgreSQL 会做得更好。

于 2013-04-23T04:30:39.887 回答