【问题标题】:Troubleshooting MySQL to MSSQL PHP Query Translation and SpeedMySQL 到 MSSQL PHP 查询转换和速度故障排除
【发布时间】:2013-11-21 12:47:14
【问题描述】:

首先,如果这里不是这类问题的地方,请告诉我,我会删除它。

好的,所以我有一个 MySQL PHP 查询翻译类,可以在其他数据库中翻译为 MSSQL。以下测试文件产生以下结果(启用调试)

Test_File.php

include 'session_handler.php';
include 'database_connection.php';
$result = $db->query("SELECT * FROM industries LIMIT 5");

MySQL 结果:

Query time was 0.00622892379761 seconds for:
SELECT * FROM industries LIMIT 5
Query time was 0.000350952148438 seconds for:
SELECT "session_id" FROM "sessions" WHERE "session_id" = '58'
Query time was 0.000293016433716 seconds for:
UPDATE "sessions" SET "value" = 'x', "expiration" = '0' WHERE "session_id" = '58'
Total query time: 0.00848698616028 seconds

MSSQL 结果

    Query time was 0.21740579605103 seconds for:
SELECT
                c.table_schema AS "schema",
                c.table_name   AS "table",                      
                c.column_name  AS "column",
                c.data_type    AS "type"
        FROM
                INFORMATION_SCHEMA.COLUMNS AS c
        WHERE
                (c.data_type = 'nvarchar' OR
                 c.data_type = 'ntext' OR
                 c.data_type = 'nchar') AND
                c.table_catalog = DB_NAME()
        ORDER BY
                lower(c.table_name) ASC,
                lower(c.column_name) ASC
Query time was 0.21066212654114 seconds for:
SELECT TOP 5 *, CAST("industries"."industry" AS VARBINARY(MAX)) AS fmssqln__industry FROM industries
Query time was 0.21116590499878 seconds for:
SELECT "session_id" FROM "sessions" WHERE "session_id" = '58'
Query time was 0.21582698822021 seconds for:
UPDATE "sessions" SET "value" = x, "expiration" = '0' WHERE "session_id" = '58'
Total query time: 1.7053256034851 seconds

如您所见,MySQL 查询非常快,而转换后的查询(由类转换)大约需要 2 秒。

我对 MSSQL 的语法一无所知,所以我不确定转换后的查询是否尽可能优化?

所以我的问题是 - 转换后的 MSSQL 查询是否是 MySQL 查询的正确翻译,我应该从哪里开始解决速度问题?

其他信息: MSSQL 和 MySQL 数据库和表在内容和架构方面是相同的。

谢谢

【问题讨论】:

  • MSSQL 中的 session_id 是索引还是主键?尝试在 QA 中运行此查询。
  • 您需要在 MS 提供的一些查询工具中测试该查询。可能是 PHP MSSQL 客户端滞后。
  • 啊好吧...我能做到。

标签: php mysql sql-server


【解决方案1】:

可能是 PHP 正在使用的驱动程序?也许 SQL Server 只是速度较慢。你用的是快递吗?它对可以使用的资源有限制。尝试 SSMS 中的查询并将其粘贴在顶部以获取查询时间:

SET STATISTICS TIME ON

Express 的限制是listed here。因此 CPU 是 1 个插槽或 4 个内核(以较少者为准),RAM 限制为 1GB。

【讨论】:

  • 我实际上在使用 Azure SQL。我现在正在使用 Visual Studio 进行一些不同的测试。感谢您提供有关SET STATISTICS TIME ON 的提示。你知道在通过 PHP 执行 sqlsrv_query($conn, $sql); 时如何获取超时吗?
  • 您好,经过多次故障排除后,发现是延迟问题。我已将所有 azure 实例移动到同一位置,它现在以“可接受”的速度运行...
猜你喜欢
  • 2012-09-28
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多