mysql - 為什么where條件中or加索引不起作用?
問(wèn)題描述
CREATE TABLE test (id int(11) NOT NULL AUTO_INCREMENT COMMENT ’主鍵ID’,creator varchar(128) NOT NULL DEFAULT ’0’ COMMENT ’創(chuàng)建人’,gmt_create timestamp NULL DEFAULT NULL COMMENT ’創(chuàng)建時(shí)間’,modifier varchar(128) DEFAULT ’0’ COMMENT ’修改人’,gmt_modified timestamp NULL DEFAULT NULL COMMENT ’修改時(shí)間’,title varchar(64) DEFAULT NULL COMMENT ’工單標(biāo)題’,category varchar(32) DEFAULT NULL COMMENT ’工單類別’,subject varchar(32) DEFAULT NULL COMMENT ’工單類型’,demander varchar(30) DEFAULT NULL COMMENT ’需求方’,is_atomic char(1) DEFAULT ’y’ COMMENT ’是否原子工單’,atomic_id int(11) DEFAULT NULL COMMENT ’當(dāng)前原子工單在列表中ID’, PRIMARY KEY (id)) ENGINE=InnoDB AUTO_INCREMENT=182431 DEFAULT CHARSET=utf8 COMMENT=’測(cè)試表’;
SHOW INDEX FROM test
ALTER TABLE test ADD INDEX test_title (title)
EXPLAIN SELECT * FROM test.test WHERE id = 100 or title = ’gg’
EXPLAIN SELECT * FROM test.test WHERE title = ’ggg’
問(wèn)題解答
回答1:一,數(shù)據(jù)量太少,制定執(zhí)行計(jì)劃時(shí)發(fā)現(xiàn)全表更快,可以往表里填幾百萬(wàn)id和tittle不一樣的數(shù)據(jù)試試。二,確保mysql版本5.0以上,且查詢優(yōu)化器開(kāi)啟了index_merge_union=on, 也就是變量optimizer_switch里存在index_merge_union且為on
補(bǔ)充一點(diǎn):
@mokeyjay 的說(shuō)法不是很正確,且過(guò)時(shí)。可以看看以下文檔。
http://dev.mysql.com/doc/refman/5.6/en/index-merge-optimization.html
回答2:老生常談了,直接引用一篇博文http://blog.csdn.net/hguisu/article/details/7106159
回答3:謝謝邀請(qǐng)。看看這篇文檔mysql關(guān)于or的索引問(wèn)題 希望對(duì)你有幫助
回答4:贊成@xiayongsheng的說(shuō)法, 在線上找了一含幾千萬(wàn)數(shù)據(jù)的表, explain了一下or查詢
# id是主鍵, user_id是普通索引explain SELECT * from t WHERE id = 100000 or user_id = ’c7b6752c37b111e6a7d705b57e583e2e’;idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra1SIMPLEtindex_mergePRIMARY,t_useridPRIMARY,t_userid4,123 2Using union(PRIMARY,t_userid); Using where
相關(guān)文章:
1. boot2docker無(wú)法啟動(dòng)2. node.js - antdesign怎么集合react-redux對(duì)input控件進(jìn)行初始化賦值3. 關(guān)于docker下的nginx壓力測(cè)試4. MYSQL中如何把SELECT A AS B中的B作為WHERE篩選條件5. mysql - InnoDB中的鎖6. MySQL客戶端吃掉了SQL注解?7. mysql - 對(duì)同一個(gè)表同時(shí)更新2條記錄,但更新不同字段,會(huì)不會(huì)造成數(shù)據(jù)丟失?8. node.js mysql Cannot find module "net" 和 "tls"和"fs" 的問(wèn)題9. mysql 一條語(yǔ)句多種count如何寫(xiě)10. 數(shù)據(jù)庫(kù) - Mysql的存儲(chǔ)過(guò)程真的是個(gè)坑!求助下面的存儲(chǔ)過(guò)程哪里錯(cuò)啦,實(shí)在是找不到哪里的問(wèn)題了。

網(wǎng)公網(wǎng)安備