我有一個MySQL表的主鍵:沒有索引 - 但列被編
CREATE TABLE `members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`type` char(1) ,
`status` char(1) ,
`enable` char(1),
`club` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3714 DEFAULT CHARSET=utf8 ;
如果我做下面的查詢
SELECT * FROM members WHERE club='adfsd';
我得到一個Mysqli的'查詢/準備聲明中沒有使用索引'警告。這是公平的 - 我真的應該有一個索引。然後,我在俱樂部
KEY `club` (`club`)
該指數是由添加索引 - 我可以看到它通過一個形容,但我做的SELECT查詢,我得到了同樣的「使用索引...」警告。
所以我改變了INDEXNAME的東西從列不同的名稱
KEY `clubind` (`club`)
和查詢工作沒有警告。
如果我在其中一個列上創建索引,說'狀態'並使用'status'作爲索引名稱,並使用查詢中的列,則所有內容都按預期工作。
唯一不同的是我能看到的是有問題的列是一個整數,其他的是字符。
'club int(10)unsigned NOT NULL' ...你看到這裏有什麼問題嗎?你正在比較一個int列和一個字符串。 –
我投票結束這個問題是因爲一個簡單的印刷錯誤。 –
我的示例查詢是誤導性的 - 我在示例中輸入錯誤,因爲我正在使用預準備語句。查詢總是使用一個整數。問題在於,爲什麼查詢在索引名稱與列名稱不同時沒有「未使用索引...」警告時工作 - 與查詢帶有字符串的整數列無關。 – user1199529