相关疑难解决方法(0)

当使用索引时,Mysql解释查询类型为"ALL"

我在Mysql中运行了一个查询,如下所示:

EXPLAIN
SELECT *
FROM(
        SELECT *  # Select Number 2
        FROM post
        WHERE   parentid = 13
        ORDER BY time, id
        LIMIT 1, 10
    ) post13_childs
JOIN post post13_childs_childs
ON post13_childs_childs.parentid = post13_childs.id
Run Code Online (Sandbox Code Playgroud)

结果是:

id |select_type  |table               |type |possible_keys  |key      |key_len  |ref              |rows    |Extra
1  |PRIMARY      |<derived2>          |ALL  | NULL          | NULL    |NULL     |NULL             |10      |
1  |PRIMARY      |post13_childs_childs|ref  |parentid       |parentid |9        |post13_childs.id |10      |Using where
2  |DERIVED      |post                |ALL  |parentid       |parentid |9        |                 |153153  |Using where; Using filesort
Run Code Online (Sandbox Code Playgroud)

这意味着它使用了索引, …

mysql sql indexing query-optimization explain

15
推荐指数
2
解决办法
1万
查看次数

我如何在MySQL中请求帮助优化和修复查询?

MySQL问题是StackOverflow上我最喜欢的一些问题.

不幸的是,这样的事情:

SELECT foo, bar, baz, quux, frozzle, lambchops FROM something JOIN somethingelse ON 1=1 JOIN (SELECT * FROM areyouserious) v ON 0=5 WHERE lambchops = 'good';
Run Code Online (Sandbox Code Playgroud)

让我的眼睛流血.

此外,尝试描述您的架构通常如下所示:

我有一个表CrazyTable,其中一个列是一个日期,它有一个主键Foo_Key但我想使用column_bar的子串(在CrazyTable中)加入SOMETABLE,该子串与月亮的相位有关(我存储了它)在moon_phases中作为三次序列化的PHP数组).

这是我问的一个问题的例子,如果我没有按照下面的步骤操作,我将永远不会得到任何人的满意答复:我没有羞耻..

我将在下面回答最能帮助解决问题的方法.什么帮助

mysql optimization

12
推荐指数
1
解决办法
291
查看次数

如何告诉MySQL Optimizer在派生表上使用索引?

假设您有这样的查询......

SELECT T.TaskID, T.TaskName, TAU.AssignedUsers
FROM `tasks` T
    LEFT OUTER JOIN (
        SELECT TaskID, GROUP_CONCAT(U.FirstName, ' ',
            U.LastName SEPARATOR ', ') AS AssignedUsers
        FROM `tasks_assigned_users` TAU
            INNER JOIN `users` U ON (TAU.UserID=U.UserID)
        GROUP BY TaskID
    ) TAU ON (T.TaskID=TAU.TaskID)
Run Code Online (Sandbox Code Playgroud)

可以将多个人分配给给定任务.此查询的目的是为每个任务显示一行,但将人员分配给单个列中的任务

现在...假设你有正确的指标设置上tasks,userstasks_assigned_users.在连接tasks到派生表时,MySQL Optimizer仍然不会使用TaskID索引.WTF?!?!?

所以,我的问题是......如何使这个查询使用tasks_assigned_users.TaskID上的索引?临时表是蹩脚的,所以如果这是唯一的解决方案...... MySQL优化器是愚蠢的.

使用的索引:

  • 任务
    • PRIMARY - TaskID
  • 用户
    • 主要 - 用户ID
  • tasks_assigned_users
    • PRIMARY - (TaskID,UserID)
    • 附加索引UNIQUE - (UserID,TaskID)

编辑:此外,此页面表示派生表在连接发生之前执行/实现.为什么不重新使用密钥来执行连接?

编辑2: MySQL优化器不会让你在派生表上放置索引提示(大概是因为派生表上没有索引)

编辑3:这是一篇非常好的博客文章:http: …

mysql sql optimization join derived-table

6
推荐指数
1
解决办法
8126
查看次数

MYSQL优化和问题

我正在尝试优化我的MySQL查询,我需要一些帮助.这是我目前的查询:

SELECT *,
       (SELECT name FROM stores WHERE id = products.store_id) AS store_name,
       (SELECT username FROM stores WHERE id = products.store_id) AS store_username,
       (SELECT region_id FROM stores WHERE id = products.store_id) AS region_id,
       (SELECT city_id FROM stores WHERE id = products.store_id) AS city_id,
       (SELECT name FROM categories_sub WHERE id = products.subcategory_id) AS subcategory_name,
       (SELECT name FROM categories WHERE id = category_id) AS category_name
FROM products
WHERE date_start <= DATE(NOW()) AND date_end >= DATE(NOW())
Run Code Online (Sandbox Code Playgroud)

我很确定它可以更快.

我也有一个问题,当我尝试按region_id选择所有产品时(通过添加类似"AND region_id = MYID"的东西)它不起作用,我想知道它是否可以让它工作,以及如何?

感谢您的时间!

解 …

mysql sql optimization subquery

1
推荐指数
1
解决办法
574
查看次数