如何通过性能提高mysql订单?
我有100万件商品的目录,这些商品都有自己的特许经营权。当我打开一个页面时,我应该首先显示带有图像的可用项目。所有表都有外键和索引,但我对order part有一个问题。 无顺序查询在0.1毫秒内执行,否则最多1秒 我有这样的表格: 部门分支机构id,标题15行 catalogCategory id,标题150行 catalogItem id、标题、categoryId、hasImages、已启用、已删除100万行 catalogVisibility id,特许经营id,拥有本地1500万行 完整表模式 目录项 目录可见性 疑问是如何通过性能提高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万行 完
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的复杂加速。不选择列的左连接表没有什么意义。@草莓,我按这些表筛选项目。还有其他方法吗?当两个表总是有匹配的记录时,我认为直接连接比左连接快。为了帮助您,我们需要查看表定义,包括索引定义。请把你的问题告诉他们。请阅读本文,特别是关于查询性能的部分。。。订购人。。。限度是一种臭名昭著的性能反模式:它要求服务器订购一大堆信息,然后丢弃几乎所有的信息。有没有其他方法可以得到你需要的结果?