有一個父表,並與像外鍵子表時,我在想:SQL查詢加入建議
users
id | username | password |
users_blog
id | id_user | blog_title
是確定使用id作爲自動增量也連接表(users_blog),否則我將有查詢速度問題?
另外我想知道哪些字段添加爲PRIMARY,哪些作爲索引在users_blog表中?
希望的問題是明確的,對不起我的英文不好:P
有一個父表,並與像外鍵子表時,我在想:SQL查詢加入建議
users
id | username | password |
users_blog
id | id_user | blog_title
是確定使用id作爲自動增量也連接表(users_blog),否則我將有查詢速度問題?
另外我想知道哪些字段添加爲PRIMARY,哪些作爲索引在users_blog表中?
希望的問題是明確的,對不起我的英文不好:P
我不認爲你實際上需要users_blog表中的id列。我會讓id_user成爲該表的主索引,除非您有另外的理由這樣做(也許users_blog表實際上有更多列,而您只是沒有向我們展示它)。
就性能而言,在users_blog表中具有id列不應該影響性能本身,但您的查詢永遠不會使用此索引,因爲您很可能不會選擇基於該列的數據。將id_user列作爲主索引實際上對您有利,並且會加速您的連接和選擇。
我在users_blog
上看不到有自動增量id
列的問題。
主鍵可以是id_user, id
。至於索引,這很大程度上取決於您的使用情況。
我懷疑你會與博客引擎有任何數據庫相關的性能問題,所以索引或不索引沒有太大的區別。
您不必在users_blog表中使用id
列,您可以將id_user與users表一起加入。也自動增量是不是性能問題
id
是所有表鍵一個好聽的名字,它的標準<table>_id
適用於外鍵的標準名稱 - 在你的情況下使用user_id
(不id_user
你有)user
不users
你SQL應該是這個樣子:
create table user (
id int not null auto_increment primary key,
...
);
create table user_blog (
id int not null auto_increment primary key,
id_user int not null references user,
...
);
「這是一個好主意,它有一個標識符列...保證一種唯一標識行的方式(如果所有其他列對於兩行都是相同的)」 - 因此兩個不同的用戶可以使用相同的「用戶名'和'密碼'組合,當他們中的一個登錄時,他們可以訪問其他人的賬戶?這並不意味着我是個好主意。 – onedaywhen
如果您的要求是其他列集也是*唯一的,那麼在它們上定義一個唯一的索引。我在談論更多有關兩次發生的相同數據,這不是問題 - 例如,您只想選擇要刪除的數據。 – Bohemian
正在討論的案例有列'username'和'password':什麼時候在這個表中複製'username'是一個好主意?我說永遠不會,因此建議在此表中使用'username'作爲唯一的關鍵。 – onedaywhen
是確定使用ID作爲自動遞增也在連接表(users_blog) 或我會有問題的查詢速度?
字段是否自動遞增不會影響您檢索數據庫中已有數據的速度。
也是我想知道哪些字段添加爲主要和其在users_blog表 INDEX?
PRIMARY KEY(和其他約束)的目的是強制數據的正確性。索引對於性能而言「僅僅」。
所以場將在PRIMARY KEY什麼取決於你希望與您的數據模型來表達:
users_blog
行標識單獨的id
(即有一個「非身份」這兩個表之間的關係),將id
單獨放在PRIMARY KEY中。id_user
和id
(又名「識別」關係)的組合來識別它,那麼您將在PK中將這兩個字段放在一起。作爲索引,這取決於您將如何訪問您的數據。例如,如果您執行多個JOIN,則可以使用或考慮id_user
上的索引。
索引性能產生很好的教程,可以發現:
@guys什麼我忘了告訴大約是id_user爲1對多的關係(所以在需要時與用戶ID我將加盟),並且我還會指定user_blog表中的id auto_increment用於僅分頁user_blog表。 – sbaaaang