1. 資料庫中聯合主鍵 為什麼根據某個主鍵查詢時速度慢
你好:這個聯合主鍵的話,遍歷整個表中查詢條件是相當復雜的,而且根據你的表欄位的大小,數據量等都有很大的關系,現在一般的話我不太愛用聯合主鍵,都會做個uuid的主鍵來用,
一個主鍵的查詢效率為1,那麼兩個的話效率效率肯能都不到0.5的。
備註:數據量不大的話,應該不會有這種體驗效果,如果數據量很大的話,建議別搞這種聯合主鍵
2. 什麼是sql中的復合主鍵
復合主鍵應該是一張表中,由幾個欄位來定的唯一性,因為某幾列的組合就能唯一確立一條記錄,因此他們的組合為一張表的主鍵。通常,一張表有一個主鍵欄位,是唯一非空的。而復合主鍵是一張表由幾個欄位來定唯一性,即每條記錄的col1和col2欄位唯一。
3. 資料庫中復合主鍵如何查詢,sql 語句如何寫
zwb12340 說的就是錯的
首先來說一下你的這兩種寫法
1.這一個比較快,其實這是把兩個SQL 拼接成1個SQL,但是在拼接的時候使用了UNION ,這個過程會排序去重復,這一點上會影響性能。可以把UNION 改成UNION ALL,UNION ALL不會排序去重,可能效率會更好一點
2.這一個不會太快,因為使用in的話,默認是不使用索引的,那麼這一個過程會全表掃描,那麼就很慢了(我這里說的索引是默認的B+樹索引,是自動屏蔽的,如果是BITMAP索引的話,是會使用的),
對於你這個問題的解決,我給以下幾個意見
1.首先把UNION改成UNION ALL試一試,看效率怎麼樣
2.檢查是否在proct上有沒有索引,盡量建一個索引
3.如果以上兩個改進之後,還沒效果的話,可以在這個表上,基於proct建立分區表,使用分區表的話,那麼效果會比較明顯
4. Hibernate中如何對存在復合主鍵的表進行查詢
直接查詢主表 from Person 就可以了.
根據主鍵 查詢單個實體.
PersonId id=new PersonId();
id.setA();
id.setB();
session.findById(Person.class,id).
根據 主鍵的某個值進行查詢
from Person p where p.id.(主鍵類屬性A)=?
from Person p where p.id.(主鍵類屬性B)=?
查詢出來了是一個list.
5. 資料庫表中的主鍵有什麼作用
資料庫主鍵
主鍵:表中經常有一個列或多列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可強製表的實體完整性。當創建或更改表時可通過定義 PRIMARY KEY 約束來創建主鍵。一個表只能有一個 PRIMARY KEY 約束,而且 PRIMARY KEY 約束中的列不能接受空值。由於 PRIMARY KEY 約束確保唯一數據,所以經常用來定義標識列。
作用:
1)保證實體的完整性;
2)加快資料庫的操作速度
3) 在表中添加新記錄時,ACCESS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重復。
4) ACCESS自動按主鍵值的順序顯示表中的記錄。如果沒有定義主鍵,則按輸入記錄的順序顯示表中的記錄。
在有些資料庫中,雖然主鍵不是必需的,但最好為每個表都設置一個主鍵,不管是單主鍵還是復合主鍵。它存在代表著表結構的完整性,表的記錄必須得有唯一區分的欄位,主鍵主要是用於其他表的外鍵關聯,以及本記錄的修改與刪除。
主鍵的無意義性
在開發過程中,讀者可能會看到將一些表使用有意義的欄位表示主鍵,例如「用戶登錄信息表」將「登錄名」(英文名)作為主鍵,「訂單表」中將「訂單編號」作為主鍵,如此設計主鍵一般都是沒什麼問題,因為將這些主鍵基本不具有「意義更改」的可能性。但是,也有一些例外的情況,例如「訂單表」需要支持需求「訂單可以作廢,並重新生成訂單,而且訂單號要保持原訂單號一致」,那將「訂單編號」作為主鍵就滿足不了要求了。因此讀者在使用具有實際意義的欄位作為主鍵時,需要考慮是否存在這種可能性。
主鍵的選擇
①編號作主鍵
此方法就是採用實際業務中的唯一欄位的「編號」作為主鍵設計,這在小型的項目中是推薦這樣做的,因為這可以使項目比較簡單化,但在使用中卻可能帶來一些麻煩,比如要進行「編號修改」時,可能要涉及到很多相關聯的其他表,就像黎叔說的「後果很嚴重」;還有就是上面提到的「業務要求允許編號重復時」,我們再那麼先知,都無法知道業務將會修改成什麼?
②自動編號主鍵
這種方法也是很多朋友在使用的,就是新建一個ID欄位,自動增長,非常方便也滿足主鍵的原則,優點是:資料庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對於檢索非常有利;數字型的,佔用空間小,易排序,在程序中傳遞也方便;如果通過非系統增加記錄(比如手動錄入,或是用其他工具直接在表裡插入新記錄,或老系統數據導入)時,非常方便,不用擔心主鍵重復問題。
缺點:其實缺點也就是來自其優點,就是因為自動增長,在手動要插入指定ID的記錄時會顯得麻煩,尤其是當系統與其他系統集成時,需要數據導入時,很難保證原系統的ID不發生主鍵沖突(前提是老系統也是數字型的);如果其他系統主鍵不是數字型那就麻煩更大了,會導致修改主鍵數據類型了,這也會導致其他相關表的修改,後果同樣很嚴重;就算其他系統也是數字型的,在導入時,為了區分新老數據,可能想在老數據主鍵前統一加一個「o」(old)來表示這是老數據,那麼自動增長的數字型又面臨一個挑戰。
6. sql聯合主鍵的作用
舉個簡單的例子,
班上有相同姓名的學生,也有相同生日的學生,但一般沒有既是同名又是同生日的學生,
因此在不考慮用序號做主鍵的情況下,可以考慮使用姓名以及生日這2個欄位來做聯合主鍵。
7. 資料庫聯合主鍵查詢
沒太明白你AB的具體設置
還有表裡數據的設置
不過你的意思我明白了
這樣吧
假設你有兩張表
表AA和表BB
然後X和Y是兩個表裡都有的屬性
假設符合兩表的X相等並且Y也相等這個條件時,能唯一確定一條記錄
那麼就可以寫
select
A.X,A.Y,B.X,B.Y
from
AA
A,BB
B
where
A.X=B.X
and
A.Y=B.Y;
select里也可以加別的表裡的屬性段
你想查的東東~
8. 在SQL中,什麼是復合主鍵
所謂的復合主鍵 就是指你表的主鍵含有一個以上的欄位組成
比如
create table test
(
name varchar(19),
id number,
value varchar(10),
primary key (name,id)
)
上面的name和id欄位組合起來就是你test表的復合主鍵
它的出現是因為你的name欄位可能會出現重名,所以要加上ID欄位這樣就可以保證你記錄的唯一性
一般情況下,主鍵的欄位長度和欄位數目要越少越好