2012-03-05 20 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