为什么数据库不根据查询频率自动索引表?是否存在任何工具来分析数据库及其接收的查询,并自动创建或至少建议创建哪些索引?我对MySQL特别感兴趣,但我也对其他数据库感到好奇。 最佳答案 这是我在stackoverflow上看到的最好的问题。不幸的是我没有答案。Google的bigtable会自动索引正确的列,但BigTable不允许任意连接,因此问题空间要小得多。我唯一能给出的答案是:有一天有人问,“为什么计算机不能只分析我的代码并编译和静态键入最常运行的代码片段?”今天人们正在解决这个问题(例如FF3.1中的Tamarin),我认为“
是否可以在只读从站上设置不同的索引,而不是在主站上?基本上,考虑到两个系统的不同要求,这似乎是有道理的,但我想确保它能够正常工作并且不会引起任何问题。 最佳答案 我相信是的。复制工作后,您可以删除从属服务器上的索引并创建您想要的索引,并且应该这样做。由于MySQL复制的是语句而不是数据(至少默认情况下),只要插入或更新或从表中选择所需的SQL不需要更改,它就不会注意到。现在这显然有缺点。如果您创建一个不在主服务器上的唯一key,您可能会在主服务器上插入无法插入从服务器的数据。如果使用索引完成更新,它可能会在主服务器上运行得很快,但会
是否可以在只读从站上设置不同的索引,而不是在主站上?基本上,考虑到两个系统的不同要求,这似乎是有道理的,但我想确保它能够正常工作并且不会引起任何问题。 最佳答案 我相信是的。复制工作后,您可以删除从属服务器上的索引并创建您想要的索引,并且应该这样做。由于MySQL复制的是语句而不是数据(至少默认情况下),只要插入或更新或从表中选择所需的SQL不需要更改,它就不会注意到。现在这显然有缺点。如果您创建一个不在主服务器上的唯一key,您可能会在主服务器上插入无法插入从服务器的数据。如果使用索引完成更新,它可能会在主服务器上运行得很快,但会
考虑以下数据库表:包含13,000,000行的“消息”表(每条消息一行)。包含3,000,000行(每个用户一行)的“用户”表。以下查询用于获取一堆消息和对应的用户:SELECTmessages.id,messages.message,users.id,users.usernameFROMmessagesINNERJOINusersONmessages.user_id=users.idWHEREmessages.idin(?,?,?,?...atotalof100"?":s);在每个查询中获取100条消息。“消息”在id(主键,BIGINT不是自动生成)和user_id上编入索引。"u
考虑以下数据库表:包含13,000,000行的“消息”表(每条消息一行)。包含3,000,000行(每个用户一行)的“用户”表。以下查询用于获取一堆消息和对应的用户:SELECTmessages.id,messages.message,users.id,users.usernameFROMmessagesINNERJOINusersONmessages.user_id=users.idWHEREmessages.idin(?,?,?,?...atotalof100"?":s);在每个查询中获取100条消息。“消息”在id(主键,BIGINT不是自动生成)和user_id上编入索引。"u
对于我的一个MySQL表,我删除了列col1,然后从包含它的唯一索引(col0、col1、col2、col3)中删除它。它是由MySQL自动处理的吗?在我删除列col1后,似乎以前的唯一索引(col0,col1,col2,col3)自动更改为(col0,col2,col3)。这会是一个问题还是我必须删除唯一索引并将其重新创建为(col0,col2,col3)? 最佳答案 根据MySQL5.1ReferenceManual:Ifcolumnsaredroppedfromatable,thecolumnsarealsoremovedfr
对于我的一个MySQL表,我删除了列col1,然后从包含它的唯一索引(col0、col1、col2、col3)中删除它。它是由MySQL自动处理的吗?在我删除列col1后,似乎以前的唯一索引(col0,col1,col2,col3)自动更改为(col0,col2,col3)。这会是一个问题还是我必须删除唯一索引并将其重新创建为(col0,col2,col3)? 最佳答案 根据MySQL5.1ReferenceManual:Ifcolumnsaredroppedfromatable,thecolumnsarealsoremovedfr
我知道索引的重要性以及连接顺序如何改变性能。我做了一堆与多列索引相关的阅读,但没有找到我的问题的答案。我很好奇我是否做一个多列索引,如果指定它们的顺序是否重要。我的猜测是它不会,并且引擎会将它们视为一个组,其中排序无关紧要。但我想验证一下。例如来自mysql的网站(http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html)CREATETABLEtest(idINTNOTNULL,last_nameCHAR(30)NOTNULL,first_nameCHAR(30)NOTNULL,PRIMARYKEY(id),
我知道索引的重要性以及连接顺序如何改变性能。我做了一堆与多列索引相关的阅读,但没有找到我的问题的答案。我很好奇我是否做一个多列索引,如果指定它们的顺序是否重要。我的猜测是它不会,并且引擎会将它们视为一个组,其中排序无关紧要。但我想验证一下。例如来自mysql的网站(http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html)CREATETABLEtest(idINTNOTNULL,last_nameCHAR(30)NOTNULL,first_nameCHAR(30)NOTNULL,PRIMARYKEY(id),
例如,我正在查询一个我知道将是唯一的并且被索引的字段,例如主键。因此我知道这个查询只会返回1行(即使没有LIMIT1)SELECT*FROMtablenameWHEREtablename.id=123LIMIT1或只更新1行UPDATEtablenameSETsomefield='somevalue'WHEREtablename.id=123LIMIT1如果字段被索引,添加LIMIT1会提高查询执行时间吗? 最佳答案 在查询主键/唯一字段时使用MySQL“LIMIT1”有什么意义吗?在使用违反主键或唯一约束的过滤条件进行查询时,使用