2011-08-04 43 views
1

我正在構建一個MySQL表,它將保存許多一對一聊天會話的所有數據。快速索引聊天SQL表

當插入始終是連續的時,對索引表的插入仍然很慢?

使用聊天系統,我期望頻繁的插入以及頻繁的搜索。

每個聊天會話都會跟蹤它自己的會話ID和最新的帖子ID。所以要獲得新帖子,我可以運行這樣的查詢:

SELECT * FROM chat WHERE sessionID = xxxx AND postID > xxx 

有沒有辦法有多維索引?看起來最快的索引方式主要是通過sessionID,然後通過postID。

+0

什麼是數據庫服務器? –

+0

這是一個OSX Apache MySQL PHP安裝程序。這是你的意思嗎? – objectivesea

+0

您可以在MySQL中使用sessionID,postID的索引。這是上述查詢的最佳索引。爲了快速插入,使用autoincremet主鍵(通常它對大表有所不同)。 –

回答

2

您也可以按照其他人的建議,對該查詢使用多列索引。

然而,也就是說,不是一個多維索引,它只是在同一維上放兩列。想想按姓氏,名字排序的印刷電話目錄。兩列,但只有一個維度。

您特定查詢中的重要方面是您有一個範圍條件。爲了獲得最佳性能,重要的是首先將等於條件的列和範圍條件放入索引中,就像其他評論者所建議的一樣。你不需要任何多維的東西。

如果您有多個範圍條件,您確實需要(需要)多維索引。

更多有關: http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/greater-less-between-tuning-sql-access-filter-predicates

0

您可以用這樣的東西在兩列之間創建一個索引。

ALTER TABLE chat ADD INDEX chat_sessionID_postID_idx (sessionID ASC, postID ASC);