Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过性能提高mysql订单?_Mysql_Performance_Mariadb_Query Performance - Fatal编程技术网

如何通过性能提高mysql订单?

如何通过性能提高mysql订单?,mysql,performance,mariadb,query-performance,Mysql,Performance,Mariadb,Query Performance,我有100万件商品的目录,这些商品都有自己的特许经营权。当我打开一个页面时,我应该首先显示带有图像的可用项目。所有表都有外键和索引,但我对order part有一个问题。 无顺序查询在0.1毫秒内执行,否则最多1秒 我有这样的表格: 部门分支机构id,标题15行 catalogCategory id,标题150行 catalogItem id、标题、categoryId、hasImages、已启用、已删除100万行 catalogVisibility id,特许经营id,拥有本地1500万行 完

我有100万件商品的目录,这些商品都有自己的特许经营权。当我打开一个页面时,我应该首先显示带有图像的可用项目。所有表都有外键和索引,但我对order part有一个问题。 无顺序查询在0.1毫秒内执行,否则最多1秒

我有这样的表格:

部门分支机构id,标题15行 catalogCategory id,标题150行 catalogItem id、标题、categoryId、hasImages、已启用、已删除100万行 catalogVisibility id,特许经营id,拥有本地1500万行 完整表模式

目录项

目录可见性

疑问是


    SELECT i.*
      FROM catalogItem i
      LEFT 
      JOIN catalogVisibility v
        ON i.id v.itemId
       AND v.franchiseId = 3
     WHERE i.enabled = 1
       AND i.deleted = 0
       AND i.deleted = 0
       AND i.categoryId = 28
     ORDER 
        BY v.hasLocal DESC
         , i.hasImages DESC 
     LIMIT 24

我有这个结果并解释

如何改进我的查询

我检查了索引和键,也阅读了以下内容:


这些综合指数可能有助于:

i:  (categoryId, deleted, enabled, id)
v:  (franchiseId, itemId, hasLocal)    -- also "covering"
限制24无法优化。也就是说,查询必须首先根据左连接和WHERE收集所有行,然后根据orderby进行排序,最后只处理限制

这是由订单中提到的两个表引起的


可见项目的百分比是多少?有图像的百分比是多少?如果这两个值都很低,我可能会有一个基于UNION的复杂加速。

不选择列的左连接表没有什么意义。@草莓,我按这些表筛选项目。还有其他方法吗?当两个表总是有匹配的记录时,我认为直接连接比左连接快。为了帮助您,我们需要查看表定义,包括索引定义。请把你的问题告诉他们。请阅读本文,特别是关于查询性能的部分。。。订购人。。。限度是一种臭名昭著的性能反模式:它要求服务器订购一大堆信息,然后丢弃几乎所有的信息。有没有其他方法可以得到你需要的结果?