簡體   English   中英

MySQL數據庫表優化,以提高查詢速度和性能

[英]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查詢時出現了我的問題。

尤其應該如何配置finalidid_main ),以便從mainfinal查詢最快。

我可以取消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_mainfinal.name選擇,則在兩列上都有一個復合索引, final.name

您是否真的需要在兩個表中都包含name列? 除非進行一些性能優化(以避免連接),否則這是一個不好的數據庫設計。

因此,您應該:

  1. 收集您當前正在使用的所有查詢,並根據它們設置適當的索引
  2. 刪除所有不必要的列(例如final.idfinal.name
  3. 在查詢中使用EXPLAIN來獲取執行信息(也可以使用Explain分析器來幫助您解釋結果)
  4. 您可以嘗試查詢分析

在mysql中,您必須將id定義為PK,因為它是auto_increment。 將id_main定義為UNIQUE。

暫無
暫無

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

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