一尘不染

我如何寻求帮助以优化和修复MySQL中的查询?

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';

使我的眼睛流血。

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

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

这是我问的一个问题示例,如果我不执行以下步骤,那么我将永远不会得到任何人的满意答复:我不会感到羞耻。

我会回答下面什么帮助 最有获得最好的回答你的问题。什么对 您有 帮助?


阅读 285

收藏
2020-05-17

共1个答案

一尘不染

使用SHOW CREATE TABLE


这比起您的话语更能告诉我有关您的桌子的更多信息:

mysql> show create table magic\G
*************************** 1. row ***************************
       Table: magic
Create Table: CREATE TABLE `magic` (
  `id` int(11) DEFAULT NULL,
  `what` varchar(255) DEFAULT NULL,
  `the` datetime DEFAULT NULL,
  `heck` text,
  `soup_is_good` double DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

注意 :如果表中有70列,请 省略不必要的列 。需要什么

  • 字段已加入
  • 所选字段
  • 字段在哪里

使用EXPLAIN


这使我可以看到如何最好地优化您当前正在运行的查询,但可能是缓慢的查询:

mysql> explain select *     from magic\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: magic
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1
        Extra: 
1 row in set (0.00 sec)

使用\ G


通常 必须向右滚动不便之处。

通常:

mysql> select * from magic;
+------------+-------------------------------+---------------------+-------------------+--------------+
| id         | what                          | the                 | heck              | soup_is_good |
+------------+-------------------------------+---------------------+-------------------+--------------+
| 1000000000 | A really long text string yay | 2009-07-29 22:28:17 | OOOH A TEXT FIELD |        100.5 | 
+------------+-------------------------------+---------------------+-------------------+--------------+
1 row in set (0.00 sec)

更好:

mysql> select * from magic\G
*************************** 1. row ***************************
          id: 1000000000
        what: A really long text string yay
         the: 2009-07-29 22:28:17
        heck: OOOH A TEXT FIELD
soup_is_good: 100.5
1 row in set (0.00 sec)

CAVEAT: \ G显然会将一行数据变成几行。对于几行数据来说,这同样变得麻烦。做看起来最好的事情。

使用外部pastebin处理令人讨厌的大数据:

让我们知道您的期望


  • 慢? -我们不知道您有多慢。秒,分钟,小时?有助于了解。
  • 更快 -我们也不知道。您对快速的期望是什么?
  • 频率 -这是您计划仅运行一次的查询吗?日常?一天数百次或数千次?这可以帮助我们知道何时 足够好
2020-05-17