【问题标题】:SELECT statement for search page搜索页面的 SELECT 语句
【发布时间】: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(产品类别表)
    • 用于删除属于隐藏类别的产品

【问题讨论】:

  • 尝试向包含键盘的表添加标签属性,而不是搜索所有表连接,只需搜索标签,然后根据需要进行连接。

标签: php mysql


【解决方案1】:

知道是什么导致查询变慢的唯一方法是让数据库解释它在做什么,因为它取决于其中数据的大小。对具有 4 行的表进行全表扫描不需要时间,因此数据库永远不会使用索引,扫描具有 400 万行的同一个表需要更多时间,因此数据库将查找要使用的任何索引。

您可以将explain 放在您的查询前面并运行它以查看它在做什么,看看您是否可以找到需要改进的部分。请记住,索引过多会使插入速度变慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多