日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

索引失效-B

發(fā)布時(shí)間:2024/4/13 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 索引失效-B 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

存儲(chǔ)引擎不能使用索引中范圍條件右邊的列

盡量使用覆蓋索引(只訪問索引的查詢(索引列和查詢列一致)),減少select *

mysql 在使用不等于(!= 或者<>)的時(shí)候無法使用索引會(huì)導(dǎo)致全表掃描

注意null/not null對(duì)索引的可能影響

建議新建一個(gè)庫,試試測(cè)試腳本

CREATE TABLE staffs (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR (24) NOT NULL DEFAULT '' COMMENT '姓名',age INT NOT NULL DEFAULT 0 COMMENT '年齡',pos VARCHAR (20) NOT NULL DEFAULT '' COMMENT '職位',add_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入職時(shí)間' ) CHARSET utf8 COMMENT '員工記錄表' ; INSERT INTO staffs(NAME,age,pos,add_time) VALUES('z3',22,'manager',NOW()); ALTER TABLE staffs ADD INDEX idx_staffs_nameAgePos(NAME, age, pos); ALTER TABLE staffs ADD INDEX idx_staffs_name(NAME); EXPLAIN SELECT * FROM staffs WHERE NAME IS NULL; EXPLAIN SELECT * FROM staffs WHERE NAME IS NOT NULL;

測(cè)試腳本如下:

CREATE TABLE staffs2 (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR (24),age INT NOT NULL DEFAULT 0 COMMENT '年齡',pos VARCHAR (20) NOT NULL DEFAULT '' COMMENT '職位',add_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入職時(shí)間' ) CHARSET utf8 COMMENT '員工記錄表' ; INSERT INTO staffs2(NAME,age,pos,add_time) VALUES('z3',22,'manager',NOW()); ALTER TABLE staffs2 ADD INDEX idx_staffs2_nameAgePos(NAME, age, pos); ALTER TABLE staffs2 ADD INDEX idx_staffs2_name(NAME);EXPLAIN SELECT * FROM staffs2 WHERE NAME IS NULL; EXPLAIN SELECT * FROM staffs2 WHERE NAME IS NOT NULL;

官網(wǎng)說明

like以通配符開頭('%abc...')mysql索引失效會(huì)變成全表掃描的操作

問題:解決like '%字符串%'時(shí)索引不被使用的方法??

CREATE TABLE `tbl_user` (`id` INT(11) NOT NULL AUTO_INCREMENT,`NAME` VARCHAR(20) DEFAULT NULL,`age` INT(11) DEFAULT NULL,email VARCHAR(20) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;#drop table tbl_userINSERT INTO tbl_user(NAME,age,email) VALUES('1aa1',21,'b@163.com'); INSERT INTO tbl_user(NAME,age,email) VALUES('2aa2',222,'a@163.com'); INSERT INTO tbl_user(NAME,age,email) VALUES('3aa3',265,'c@163.com'); INSERT INTO tbl_user(NAME,age,email) VALUES('4aa4',21,'d@163.com'); INSERT INTO tbl_user(NAME,age,email) VALUES('aa',121,'e@163.com');#before indexEXPLAIN SELECT NAME,age FROM tbl_user WHERE NAME LIKE '%aa%';EXPLAIN SELECT id FROM tbl_user WHERE NAME LIKE '%aa%'; EXPLAIN SELECT NAME FROM tbl_user WHERE NAME LIKE '%aa%'; EXPLAIN SELECT age FROM tbl_user WHERE NAME LIKE '%aa%';EXPLAIN SELECT id,NAME FROM tbl_user WHERE NAME LIKE '%aa%'; EXPLAIN SELECT id,NAME,age FROM tbl_user WHERE NAME LIKE '%aa%'; EXPLAIN SELECT NAME,age FROM tbl_user WHERE NAME LIKE '%aa%';EXPLAIN SELECT * FROM tbl_user WHERE NAME LIKE '%aa%'; EXPLAIN SELECT id,NAME,age,email FROM tbl_user WHERE NAME LIKE '%aa%';#create index CREATE INDEX idx_user_nameAge ON tbl_user(NAME,age);#DROP INDEX idx_user_nameAge ON tbl_user#after indexEXPLAIN SELECT * FROM tbl_user WHERE NAME =800 AND age = 33;

字符串不加單引號(hào)索引失效

少用or,用它來連接時(shí)會(huì)索引失效

小總結(jié)

?假設(shè)index(a,b,c)

【優(yōu)化口訣】

?全職匹配我最愛,最左前綴要遵守;
?帶頭大哥不能死,中間兄弟不能斷;
?索引列上少計(jì)算,范圍之后全失效;
?LIKE百分寫最右,覆蓋索引不寫*;
?不等空值還有OR,索引影響要注意;
?VAR引號(hào)不可丟, SQL優(yōu)化有訣竅。

?

總結(jié)

以上是生活随笔為你收集整理的索引失效-B的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。