php - MySQL中的查询加速
问题描述
此代码收集并带来 100 万条记录的结果。这个过程需要很长时间才能显现出来。我怎样才能让它更快?
$urunler = $db->get_results("SELECT urunid,urunadi FROM sf_urun01 WHERE sil!=2");
foreach ($urunler as $urun ){
$a = $db->get_var("SELECT SUM(tonaj) FROM sf_urun10 WHERE urunid='$urun->urunid' AND (durumu='GIRIS' OR durumu='HATALI') AND cariid > 5 AND sil !=2");
$b = $db->get_var("SELECT SUM(tonaj) FROM sf_urun10 WHERE urunid='$urun->urunid'AND (durumu='GIRIS' OR durumu='HATALI') AND cariid < 5 AND istifyeri!='FASON' AND sil !=2");
$c = $db->get_var("SELECT SUM(tonaj) FROM sf_urun10 WHERE urunid='$urun->urunid' AND durumu='HATALI' AND cariid < 5 AND sil !=2");
$d = $db->get_var("SELECT SUM(tonaj) FROM sf_urun10 WHERE urunid='$urun->urunid' AND istifyeri='FASON' AND (durumu='GIRIS' OR durumu='HATALI') AND cariid > 5 AND sil !=2");
/*
Using Datatable
*/
}
解决方案
我认为您可以将所有这些查询合并为一个,这应该会更快:
SELECT urunid,
SUM(
CASE WHEN (durumu='GIRIS' OR durumu='HATALI') AND cariid > 5 THEN tonaj
ELSE 0 END)
AS a,
SUM(
CASE WHEN (durumu='GIRIS' OR durumu='HATALI') AND cariid < 5 AND istifyeri!='FASON' THEN tonaj
ELSE 0 END)
AS b,
SUM(
CASE WHEN durumu='HATALI' AND cariid < 5 THEN tonaj
ELSE 0 END)
AS c,
SUM(
CASE WHEN istifyeri='FASON' AND (durumu='GIRIS' OR durumu='HATALI') AND cariid > 5 THEN tonaj
ELSE 0 END)
AS d
FROM sf_urun10
WHERE sil !=2
GROUP BY urunid
这将给出一个表格
urunid a b c d
1 56 252 15 76
etc.
推荐阅读
- webpack - 构建后来自css文件的Webpack图像不会复制
- ssl - 如何在 nginx 中编写带有动态 SSL 证书的模块?
- laravel - 没有可验证用户的 Laravel 护照
- vue.js - 如何在 vue 组件单一文件中使用外部 script.js 中的变量
- firebase - 定义 Firestore 文档 ID 的可接受的词典相似性
- python - 如何矢量化 pandas iterrows 循环
- laravel - 将具有许多连接的复杂 SQL 查询转换为 Eloquent
- asp.net-core - 如何使用 blazor 使用当地文化格式化日期
标签 - docker - 在服务器重新启动后尝试设置数据持久性时,所有容器的状态都已退出(255)
- revit - 房间分隔功能有自动解决方案吗?