2012-03-05 38 views
0

我想知道的指标。PHP MySQL的指标

我想在MySQL表(行数为300,000)之一上创建索引。在这里,有一些列

  • ITEM_ID(主键)
  • ITEM_NAME
  • 类别ID
  • DATE_ADDED
  • 印象
  • 访问

我想在categoryid列上创建索引。我读过其他职位更新,插入,删除使处理缓慢,因为MySQL在每次更新重新创建索引。 以下是我的查询:

  1. 这里的更新是什么意思?
  2. 这是否意味着一个更新任何行或更新到 特定索引列(这里CATEGORYID)的任何列。

    因为当过一个项目是在搜索结果中的印象将会增加,如果用户访问项目的网页显示这种情况下,则访问将递增。

  3. 那么,这是否更新用的展示次数和访问将重新创建 指数(类别ID)每次(类别ID不上 更新变化),或者它只会重新创建索引时,类别ID被更新 或加入新行?

回答

1

这将是当你改变类别ID进行更新,或者如果你已经创建的类别ID索引新行添加更新的唯一...这将更新映射表,其中该索引管理...

+0

所以,这意味着我可以不用担心由于指标的休闲创建类别ID索引经常更新展示和访问。谢谢。 – kb0000 2012-03-05 05:40:16

+2

是你可以说 – 2012-03-05 05:42:56

0

当您索引一列时,对该列中值的任何更改将需要“更长时间”来处理,因为索引必须重新生成/重新生成,尽管除非您处理数百万条记录,否则此更改几乎不会引起注意。反过来说,拥有索引意味着在这些列上搜索会快很多倍。它是你需要做出的折衷,但如果你在这些领域寻找,通常这个指数是值得的。

1

如何以往任何时候都依赖于...索引是优化的一种方式。 首先,您可以使用以下条目识别缓慢查询:log-slow-queries long_query_time = value my.cnf 这让您知道是否需要进行优化。

接下来让MySQL的解释查询。 最有价值的是possible_keys:item_name,categoryid和使用的密钥密钥:item_name并查看是否存在:using_filesort。最后一个(using_filesort)说,你应该使用索引来节省响应时间

但是!,因为每个使用表中的一个键也是值得思考聚集在某些方面:

联合索引:

  • (类别ID,ITEM_NAME)当你WHERE部分categoryid="iao" AND item_name="xyz"
  • (ITEM_NAME,类别ID)当你WHERE部分item_name="xyz" AND categoryid="iao"

--->的顺序是非常重要的!

如果您WHERE部分是item_name="xyz" AND categoryid="iao"使用两个指标:1, 指数:ITEM_NAME有助于节省时间 2.指数:类标识符是已失去的时间

的使用组合索引,你会获得最大的效益当你的哪里部分利用ORDER BY例如:哪里部分是item_name="xyz" AND categoryid="iao" ORDER BY date_added。在这种情况下,组合索引:(item_name,categoryid,date_added)保存时间。

而且是做正确的方式:
索引消耗通过索引(DELETE, UPDATE, REPLACE, INSERT)时间,节省时间每个SELECT

+0

我不与下面的说法: “组合索引:(类别ID,ITEM_NAME)当你的WHERE部分CATEGORYID =” IAO” AND ITEM_NAME = “XYZ” 或组合索引:(ITEM_NAME,类别ID )当你的WHERE部分是item_name =“xyz”AND categoryid =“iao”---该命令很重要!“ 因为WHERE部分并不重要关键部分的顺序。 即,用于**类别ID = “IAO” AND ITEM_NAME = “XYZ” **和用于** ITEM_NAME = “XYZ” AND类别ID = “IAO” **将被使用的一个密钥。用EXPLAIN运算符测试这个 – Mikhail 2012-03-05 07:44:00