Mysql 以下哪项是服务器上最佳的查询asper执行时间和负载

Mysql 以下哪项是服务器上最佳的查询asper执行时间和负载,mysql,Mysql,下面是我的两个MySQL查询,您能告诉我根据MySQL数据库使用哪一个查询最好吗 下面是我的两个sql查询 问题1) 还有什么好问题吗?这些都是非常值得注意的 谢谢你 Raghavendra.V我认为第一个更好,因为使用JOIN几乎总是比使用子查询更好。还建议显式编写联接(尽管它与性能无关),如下所示: SELECT CAST(SUM(G1.amount) AS decimal(8,2)) AS YTDRegularPay, CAST(SUM(b1.amount) AS dec

下面是我的两个MySQL查询,您能告诉我根据MySQL数据库使用哪一个查询最好吗

下面是我的两个sql查询

问题1)

还有什么好问题吗?这些都是非常值得注意的

谢谢你


Raghavendra.V

我认为第一个更好,因为使用JOIN几乎总是比使用子查询更好。还建议显式编写联接(尽管它与性能无关),如下所示:

SELECT 
    CAST(SUM(G1.amount) AS decimal(8,2)) AS YTDRegularPay,
    CAST(SUM(b1.amount) AS decimal(8,2)) AS YTDBonusPay
FROM 
    tbl_employees_swc_grosswagedetails g1,
JOIN 
    tbl_employees_swc_grosswagedetails b1 ON g1.empid = b1.empid
                                          AND g1.PayYear = b1.PayYear
                                          AND g1.PayperiodNumber = b1.PayperiodNumber
                                          AND g1.Taxing_AuthType = b1.Taxing_AuthType
                                          AND g1.Fedtaxid = b1.Fedtaxid
 WHERE 
     g1.fedtaxid = 998899889
     AND g1.payyear = 2011
     AND g1.PayperiodNumber <= 26
     AND g1.Wage_code = 'GRTT'
     AND b1.wage_code = 'GRSP'
     AND g1.empid = 1005
     AND g1.taxing_AuthType = 'FED';
选择
将(总和(G1.金额)转换为十进制(8,2))转换为YTDRegularPay,
转换(总和(b1.金额)为十进制(8,2))为YTDBONSPAY
从…起
tbl_员工_swc_总收入详情g1,
参加
tbl\U员工\U swc\U格罗斯韦g1上的详细信息b1.empid=b1.empid
和g1.发薪年=b1.发薪年
和g1.PayperiodNumber=b1.PayperiodNumber
和g1.Taxing_AuthType=b1.Taxing_AuthType
和g1.Fedtaxid=b1.Fedtaxid
哪里
g1.fedtaxid=998899889
和g1.payyear=2011

和g1.1完全同意这一点。提出
EXPLAIN
的输出将有助于我们100%确定。请记住,
EXPLAIN
将根据表中的数据及其分布情况改变其对查询计划的建议。
select abc.Amount as YTDRegularPay,def.Amount as YTDBonusPay
from (select Cast(sum(EG.Amount) as Decimal(8,2)) as Amount 
      from tbl_employees_swc_grosswagedetails EG 
      where EG.FedTaxID=998899889 
      and EG.EmpID=1005
      and PayYear=2011 
      and EG.PayPeriodNumber<=26 
      and EG.Wage_code='GRTT' 
      and Taxing_AuthType='FED') as abc,
(select Cast(sum(EG.Amount) as Decimal(8,2)) as Amount
from tbl_employees_swc_grosswagedetails EG 
where EG.FedTaxID=998899889 
and EG.EmpID=1005
and PayYear=2011 
and EG.PayPeriodNumber<=26 
and EG.Wage_code='GRSP'
and Taxing_AuthType='FED') as def ;
 delimiter $$

 CREATE TABLE `tbl_employees_swc_grosswagedetails` (

 `id` int(11) NOT NULL AUTO_INCREMENT,
`empid` int(11) NOT NULL,
`Fedtaxid` varchar(9) NOT NULL,
`Wage_code` varchar(45) NOT NULL,
 `Amount` double NOT NULL,
 `Hrly_Rate` double DEFAULT NULL,
`Num_hours` double DEFAULT NULL,
`Taxing_AuthType` varchar(10) DEFAULT NULL,
`Taxing_Auth_Name` varchar(10) DEFAULT NULL,
`PayperiodNumber` int(11) NOT NULL,
`PayYear` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `empid` (`empid`),
 CONSTRAINT `empid` FOREIGN KEY (`empid`) REFERENCES `tblemployee` (`EmpID`) 
     ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=359 DEFAULT CHARSET=latin1$$
SELECT 
    CAST(SUM(G1.amount) AS decimal(8,2)) AS YTDRegularPay,
    CAST(SUM(b1.amount) AS decimal(8,2)) AS YTDBonusPay
FROM 
    tbl_employees_swc_grosswagedetails g1,
JOIN 
    tbl_employees_swc_grosswagedetails b1 ON g1.empid = b1.empid
                                          AND g1.PayYear = b1.PayYear
                                          AND g1.PayperiodNumber = b1.PayperiodNumber
                                          AND g1.Taxing_AuthType = b1.Taxing_AuthType
                                          AND g1.Fedtaxid = b1.Fedtaxid
 WHERE 
     g1.fedtaxid = 998899889
     AND g1.payyear = 2011
     AND g1.PayperiodNumber <= 26
     AND g1.Wage_code = 'GRTT'
     AND b1.wage_code = 'GRSP'
     AND g1.empid = 1005
     AND g1.taxing_AuthType = 'FED';