[英]MySQL Database Table optimization for FASTER Querying & Performance
我的MySQL數據庫中有2個表。 讓我們將其稱為1st main
,2nd final
。
TABLE `main` has the structure | TABLE `final` has the structure
|
`id` --> PRIMARY KEY (Auto Increment) | `id` --> PRIMARY KEY (Auto Increment)
| `id_main` --> ?? (Need help here)
|
id | name | info | id | id_main | name | info(changed)
--------------------- | ---------------------------------------
1 | Peter | 5,9 | 1 | 2 | Butters | 0.3,34
2 | Butters | 3,3 | 2 | 4 | Stewie | 1.2,4.4
3 | Stan | 2,96 | 3 | 1 | Peter | 5.7,0.9
4 | Stewie | 1,84 | 4 | 3 | Stan | 4.8,0.74
對main
數據進行分析后,結果將final
。 如您所見, final
有一個額外的列( id_main
),它指向main
。 id
實際上,這兩個表各有1億多行,執行SQL查詢時出現了我的問題。
尤其應該如何配置final
( id
& id_main
),以便從main
到final
查詢最快。
我可以取消final.id
(主鍵,自動遞增)並保留final.id_main
(作為唯一索引嗎?)
要么
我應該保留id
作為主鍵(AI)和final.id_main
作為唯一索引嗎?
我會像這樣打電話:
int id_From_Main= 10000;
SELECT `id_main` FROM `final` WHERE `id`='"+id_From_Main+"'
如果這些表之間存在1:1關系,我看不出它們為什么需要兩個單獨的自動遞增主鍵的原因。
我將刪除final.id
列,並將final.id_main
作為非自動遞增的主鍵和main.id
列的外鍵。
通常,您也可以有一個完全沒有主鍵的表。 這取決於您是否希望選擇特定的單個行。
我不理解您的查詢SELECT id_main FROM final WHERE id = '"+id_From_Main+"'
-您正在嘗試通過main中的ID選擇main中的ID值。 目的是什么,為什么要嘗試獲得已經擁有的價值?
無論如何,您提供的信息不足以提供合格的答案。 您必須根據要執行的查詢來優化數據結構。
確保在WHERE
子句中使用的列上有索引。 如果按final.id_main
選擇,則在該列上有一個索引。 如果按final.id_main
和final.name
選擇,則在兩列上都有一個復合索引, final.name
。
您是否真的需要在兩個表中都包含name
列? 除非進行一些性能優化(以避免連接),否則這是一個不好的數據庫設計。
因此,您應該:
final.id
, final.name
) EXPLAIN
來獲取執行信息(也可以使用Explain分析器來幫助您解釋結果) 在mysql中,您必須將id定義為PK,因為它是auto_increment。 將id_main定義為UNIQUE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.