我有兩種不同的情況,在200 行的小型資料庫中(如此簡單)和在2,000,000,000 行的大型資料庫中(并且每天添加更多行)我想選擇一行或多行,所以在這種情況下,哪個查詢更好?
示例表:
| ID | 代碼 | x_key | 團體 | 姓名 | 標題 | 其他專欄 |
|---|---|---|---|---|---|---|
| 1個 | 一個 | ak32d | g1 | ... | ... | ... |
| 200 | Z Z | zgi32 | g5 | ... | ... | ... |
ID :主 代碼 :索引(非復合索引) x_Key:索引(非復合索引) 組:例如 g5 組中 20% 的行
因此,例如,對于小型和大型資料庫,這是同一張表,哪個 QUERY 更適合選擇一行或多行?(問號是指我將搜索值放在查詢中)
在小型資料庫中,需要一行:
SELECT name,title FROM table WHERE code=?
SELECT name,title FROM table WHERE code=? AND x_key=?
SELECT name,title FROM table WHERE code=? AND x_key=? AND group=?
SELECT name,title FROM table WHERE code=? LIMIT 1
SELECT name,title FROM table WHERE code=? AND x_key=? LIMIT 1
SELECT name,title FROM table WHERE code=? AND x_key=? AND group=? LIMIT 1
在小型資料庫中,需要不止一行:
SELECT name,title FROM table WHERE group=?
SELECT name,title FROM table WHERE group=? AND name LIKE `%test`
&&
在大型資料庫中,需要一行:
SELECT name,title FROM table WHERE code=?
SELECT name,title FROM table WHERE code=? AND x_key=?
SELECT name,title FROM table WHERE code=? AND x_key=? AND group=?
SELECT name,title FROM table WHERE code=? LIMIT 1
SELECT name,title FROM table WHERE code=? AND x_key=? LIMIT 1
SELECT name,title FROM table WHERE code=? AND x_key=? AND group=? LIMIT 1
在大型資料庫中,需要不止一行:
SELECT name,title FROM table WHERE group=?
SELECT name,title FROM table WHERE group=? AND name LIKE `%test`
在小型和大型中,哪個更適合 SELECT,甚至更適合 UPDATE?
uj5u.com熱心網友回復:
首先,帶有LIMIT 1陳述句/部分的查詢速度更快。
但不要忘記
ORDER BY,否則 MySQL 將選擇要回傳的子集(如評論中所述)。
查詢其余部分的速度取決于配置為索引的列。
如果所有索引(或至少那些被訪問的索引),那么知道使用 PHP 過濾速度較慢,因此具有大多數條件的查詢將是最快的。
但是如果該code列是unique,那么不檢查剩余的列將是最快的:
SELECT name, title FROM table WHERE code=?
您明白了,如果您的任何列是
unique,則僅為該列設定條件。
uj5u.com熱心網友回復:
你說“需要一行”——你的意思是“只回傳一行”嗎?或者“我只需要其中一排,任何一排都可以”?或者“我只需要按某種順序排列第一行”?
擁有這兩個“復合”索引將有助于您提到的所有查詢。
INDEX(code, x_key, group)
INDEX(group, name)
如果這些組合中的任何一個是唯一的,則考慮將其PRIMARY KEY設為并擺脫ID. 這將進一步加快某些查詢的速度。你是在暗示code,本身就是UNIQUE。在那種情況下,擺脫ID并只有
PRIMARY KEY(code),
INDEX(group, name)
特別是,我之前的 3 列建議不值得擁有。
您可能無法衡量 209 行測驗用例的任何改進,但更大的表,甚至是 2B 行的表將會受益。
單行索引也可以被洗掉。
LIMIT 1如果只有一行則沒有用;除非您不確定,否則請將其關閉。如果有多行,請注意,如果沒有ORDER BY,您將獲得優化器想要給您的任何一行。
添加 anORDER BY需要重新設計索引設計。其中大部分內容都包含在我的索引食譜中
以上所有內容也適用于UPDATE。但是,如果您需要一次更新超過幾百行,還有其他問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535376.html
標籤:数据库选择索引
