当前位置: 首页 > 面试题库 >

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

田博易
2023-03-14
问题内容

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数组)。

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

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


问题答案:

使用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处理令人讨厌的大数据:

  • 糊状
  • gist.github

让我们知道您的期望

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


 类似资料:
  • Project V 提供了多种方式进行交流。 Project V 团队支持中文和英文,请选择你所熟悉的语言来提问,以避免一些不必要的误会。管理员会以问题发起者使用的语言来回复;如果提问者使用了其它的语言,则以英文回复。 Github Issue 我们使用几个不同的仓库进行不同类型的讨论。 代码问题 仅用于讨论 V2Ray 的代码问题,比如 bug。 未来计划 常规讨论 Telegram 讨论组 P

  • 校验者: @片刻 翻译者: @X 项目邮件列表 如果您在使用 scikit 的过程中发现错误或者需要在说明文档中澄清的内容,可以随时通过 Mailing List 进行咨询。 机器学习从业者的 Q&A 社区 <colgroup><col class="field-name"> <col class="field-body"></colgroup> | Quora.com: | Quora有一个和机

  • 无论在学习还是在实际工作中,我们都会经常遇到各种意想不到的困难,不能总是期望别人伸出援助之手来帮我们解决,而应该利用我们的智慧和能力攻克。 那么如何才能及时解决学习 MySQL 时的疑惑呢?可以通过 MySQL 的系统帮助来解决遇到的问题。 在 MySQL 中,查看帮助的命令是 HELP,语法格式如下: HELP 查询内容 其中,查询内容为要查询的关键字。 查询内容中不区分大小写。 查询内容中可以

  • 创建表。( INT NOT NULL AUTO_INCREMENT, VARCHAR(45)为空, 主键()); 创建表。( 十进制(6,2)为空, 十进制(6,2)为空, VARCHAR(45)为空, 插入.(,,,)值(101、'joselin','1000','dexcity'); 插入.(,,,)值(102、“rusfal”,“0”,“donxes”);在.(,,,)中插入值(103、“r

  • /**程序可以将十进制转换为二进制并报告是否使用了非法字符*程序不能将二进制转换为十进制*/import java.util.scanner; /***这个类包含一个完整的程序,只有一个main()方法,用于*将非负十进制整数(即以10为基数的整数)转换为*正二进制整数(即以2为基数的整数)。要*转换的值是从命令行读入的。*/public class BaseConversions2{public

  • 问题内容: 是否有可能优化我编写的查询 我创建了一种动态虚拟数据库,以使用户能够添加自定义字段而不影响数据库结构。到目前为止,这是该结构的非常简化的视图。 我们可以通过在db_structure中添加一行来创建一个新字段 我们希望记录的任何数据都记录到db_data中。 名称存储在db_names中,而name_id存储在db_data中 我正在尝试将案例输出到html表 希望其余的内容可以自我解