我首先使用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'."
答案 0 :(得分:1)
首先,您的问题似乎是网络问题,可能与您的ISP有关。你可能想看一下远程PostgreSQL或MySQL db我认为你会遇到同样的问题。
其次比较MySQL和PostgreSQL的性能相对比较棘手。通常,MySQL针对pkey查找进行了优化,而PostgreSQL通常针对复杂的用例进行了优化。这可能有点低级但......
MySQL InnoDB表基本上是btree索引,其中叶注包含表数据。主键是索引的键。如果未提供主键,则会为您创建一个主键。这意味着两件事:
select * from my_large_table
会很慢。
Select * from my_large_table where secondary_index_value = 2
需要两个索引遍历sinc ethe secondary index只能引用主键值。
相比之下,主键值的选择将比PostgreSQL快,因为索引包含数据。
比较PostgreSQL在一系列堆页面中以无序方式存储信息。索引与数据分开。如果要通过主键拉动,则扫描索引,然后读取找到数据的数据页,然后拉出数据。相比之下,如果从二级索引中提取,则速度并不慢。此外,这些表的结构使得在执行长select * from my_large_table
时可以进行顺序磁盘访问,这将导致操作系统预读缓存能够显着提高性能。
简而言之,如果您的查询只是通过主键进行无连接选择,那么MySQL将为您提供更好的性能。如果你有连接等,PostgreSQL会做得更好。