【发布时间】:2018-05-12 20:12:24
【问题描述】:
我正在尝试加快我的 SELECT 语句
钥匙:
- a.id(主要)
- b.id(索引)
- c.id(唯一)
- d.id(唯一)
- e.id(索引)
- a.Kid(索引)
- b.stock(索引)
- b.warehouse(索引)
SELECT 语句:
SELECT DISTINCT(a.id), a.name, c.name, c.description
FROM table1 a
LEFT JOIN table2 b ON a.id=b.id
LEFT JOIN table3 c ON a.id=c.id
LEFT JOIN table4 d ON a.id=d.id
LEFT JOIN table5 e ON a.Kid=e.id
WHERE a.Act='T'
AND b.stock!=0
AND b.warehouse IN ('LJ0001','MS0001')
AND e.internet_display=-1
AND a.name LIKE '%some text%'
OR a.Act='T'
AND b.stock!=0
AND b.warehouse IN ('LJ0001','MS0001')
AND e.internet_display=-1
AND c.name LIKE '%some text%'
OR a.Act='T'
AND b.stock!=0
AND b.warehouse IN ('LJ0001','MS0001')
AND e.internet_display=-1
AND a.id LIKE '%some text%'
OR a.Act='T'
AND b.stock!=0
AND b.warehouse IN ('LJ0001','MS0001')
AND e.internet_display=-1
AND a.EANcode LIKE '%some text%'
OR a.Act='T'
AND b.stock!=0
AND b.warehouse IN ('LJ0001','MS0001')
AND e.internet_display=-1
AND c.id LIKE '%some text%'
OR a.Act='T'
AND b.stock!=0
AND b.warehouse IN ('LJ0001','MS0001')
AND e.internet_display=-1
AND a.name LIKE '%some%'
AND a.name LIKE '%text%'
OR a.Act='T'
AND b.stock!=0
AND b.warehouse IN ('LJ0001','MS0001')
AND e.internet_display=-1
AND c.name LIKE '%some%'
AND c.name LIKE '%text%'
ORDER BY d.views DESC, a.name
LIMIT 30
- 我能做些什么让它更好/更快?
- 添加索引键?
- 更改语句的 WHERE 部分?
- 在 SELECT 语句中添加一些内容?
当有人在搜索框中键入内容时,将使用此 SELECT 语句。 这意味着 WHERE 部分会动态变化。
更多信息:
表格的含义和用途:
- table1(所有产品的表)
- 用于搜索产品名称、EANcode和ID
- table2(产品库存表)
- 用于移除仓库 MS0001 和 LJ0001 中没有的产品
- 用于移除没有库存的产品
- table3(更多信息表)
- 用于搜索产品的第二个名称
- table4(每个产品的视图表)
- 仅用于排序
- table5(产品类别表)
- 用于删除属于隐藏类别的产品
【问题讨论】:
-
尝试向包含键盘的表添加标签属性,而不是搜索所有表连接,只需搜索标签,然后根据需要进行连接。