簡體   English   中英

制作此MySQL數據庫的最有效方法是什么?

[英]What is the most efficient way to make this MySQL database?

好吧,我有一個數據庫,帶有一個用於存儲分類帖子的表,每個帖子屬於不同的城市。 就本示例而言,我們將此表稱為posts 此表包含以下列:

id        (INT, +AI),
cityid    (TEXT),
postcat   (TEXT), 
user      (TEXT), 
datatime  (DATETIME), 
title     (TEXT), 
desc      (TEXT), 
location  (TEXT)

該數據的一個例子是:

'12039',
'fayetteville-nc',
'user@gmail.com',
'December 28th, 2010 - 11:55 PM',
'post title',
'post description',
'spring lake'

id是自動遞增的, cityid是文本格式(這是我認為一旦數據庫很大我將失去性能)...

最初,我計划為每個城市使用不同的表格,現在由於用戶不得不選擇在多個城市中進行搜索和發布,因此我認為我需要將它們全部放在一個表格中。 當我每張桌子有一個城市時,一切都可以做到:

SELECT       *
FROM         `posts`
WHERE        MATCH (`title`, `desc`, `location`)
    AGAINST ('searchtext' IN BOOLEAN MODE)
  AND        `postcat` LIKE 'searchcatagory'

但是,當我嘗試一次搜索多個城市時,或者列出所有用戶帖子以供刪除或編輯時,我遇到了問題。

所以看起來我必須有一個包含所有帖子的表,並且還匹配另一個FULLTEXT字段: cityid 我猜我需要全文,因為如果用戶選擇整個州,而我的cityid是“fayetteville-nc”,我需要將cityid與“-nc”匹配,這只是一個假設,我會喜歡另一種方式。 這個數據庫可以在6個月內輕松達到一百多萬行,而對四列的全文搜索可能會很慢。

我的問題是,是否有更好的方法可以更有效地執行此操作? 除了我自己做的一些測試文章外,數據庫現在什么都沒有了。 因此,如有必要,我可以完全重新設計表結構。 我對任何和所有建議持開放態度,即使它只是一種更有效的方式來執行我的查詢。

是的,所有職位一張桌子聽起來很明智。 帖子表具有city_id也是正常的設計,它引用了city表中的id。 每個城市也有一個state_id,引用狀態表中的id,類似地,每個州都有一個country_id引用國家表中的id。 所以你可以寫:

SELECT $columns
FROM posts JOIN city ON city.id = posts.city_id
WHERE city.tag = 'fayetteville-nc'

一旦你把城市帶到一個單獨的桌子上,你可能更有意義地做到city-to-city_id預先解決。 例如,如果你有一個城市從下拉列表中選擇,那么這種情況自然會發生。 但是,如果您在搜索字段中輸入自由文本,則可能需要采用不同的方式。

您還可以搜索給定狀態(或狀態集)中的所有帖子:

SELECT $columns
FROM posts
     JOIN city ON city.id = posts.city_id
     JOIN state ON state.id = city.state_id
WHERE state.tag = 'NC'

如果您想要更加花哨或國際化,您可能需要一種更靈活的方式將地點安排到一個層次結構中(例如,您可能需要城區,縣,跨國地區,國內地區(中西部,東海岸等))但是留下來現在很容易:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM