簡體   English   中英

為什么我的MySQL不使用索引?

[英]Why my mysql doesn't use index?

我正在調整mysql查詢。 該架構具有user_id的索引(以下..),但未使用該索引。 為什么?

環境:MySQL4.0.27,MyISAM

SQL如下:

SELECT type,SUM(value_a) A, SUM(value_b) B, SUM(value_c) C
FROM  big_record_table
WHERE  user_id='<user_id>'
GROUP BY type

說明:

|table |type |possible_keys |key |key_len |ref |rows |Extra|

|big_record_table| ALL| user_id_key|||| 1059756 |Using where; Using temporary; Using filesort|

你能描述細節嗎?

方案如下:

CREATE TABLE `big_record_table` (
 `user_id` int(11) NOT NULL default '0',
 `type` enum('type_a','type_b','type_c') NOT NULL default 'type_a',
 `value_a` bigint(20) NOT NULL default '0',
 `value_b` bigint(20) default NULL,
 `value_c` bigint(20) NOT NULL default '0',
 KEY `user_id_key` (`user_id`)
) TYPE=MyISAM

我的猜測是typeuser_id沒有indexed

只是將運行。 您沒有太多可玩的東西。

首先,我們看不到如何聲明您的索引。 你能把桌子丟掉嗎? 在PostgreSQL中,您將使用pg_dump但在MySQL中我不知道如何使用。 您在桌子上做過分析嗎?

隱式類型轉換可能會阻止您的索引被使用。 您已將user_id定義為一個int,但在查詢中指定了一個字符串。 這使MySQL可以選擇將查詢中的字符串轉換為int(可能不准確)-或將數據庫中的每個user_id轉換為字符串以與查詢中的字符串進行比較。

簡短答案:嘗試刪除查詢中的引號

SELECT type,SUM(value_a) A, SUM(value_b) B, SUM(value_c) C
FROM  big_record_table
WHERE  user_id=123
GROUP BY type

(其中123替換為正確的用戶ID)。

暫無
暫無

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

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