成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

工作中遇到的99%SQL優化,這里都能給你解決方案

數據庫
前幾篇文章介紹了mysql的底層數據結構和mysql優化的神器explain。后臺有些朋友說小強只介紹概念,平時使用還是一臉懵,強烈要求小強來一篇實戰sql優化,經過周末兩天的整理和總結,sql優化實戰新鮮出爐, 大家平時學習和工作中,遇到的90% 的sql優化都會介紹到,介意篇幅過長,分成3篇文章哈。

[[284319]]

前幾篇文章介紹了mysql的底層數據結構和mysql優化的神器explain。后臺有些朋友說小強只介紹概念,平時使用還是一臉懵,強烈要求小強來一篇實戰sql優化,經過周末兩天的整理和總結,sql優化實戰新鮮出爐, 大家平時學習和工作中,遇到的90% 的sql優化都會介紹到,介意篇幅過長,分成3篇文章哈。

  1. CREATE TABLE `employees` ( 
  2.  `id` int(11) NOT NULL AUTO_INCREMENT, 
  3.  `namevarchar(24) NOT NULL DEFAULT '' COMMENT '姓名'
  4.  `age` int(20) NOT NULL DEFAULT '0' COMMENT '年齡'
  5.  `position` varchar(20) NOT NULL DEFAULT '' COMMENT '職位'
  6.  `hire_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '入職時間'
  7.  PRIMARY KEY (`id`), 
  8.  KEY `idx_name_age_position` (`name`,`age`,`position`) USING BTREE 
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='員工表'
  10. insert into employees(name,age,position,hire_time) values('LiLei', 22, 'manager', NOW()) 
  11. insert into employees(name,age,position,hire_time) values('HanMeimei', 23, 'dev', NOW()) 
  12. insert into employees(name,age,position,hire_time) values('Lucy', 23, 'dev', NOW()) 

全值匹配

索引的字段類型是varchar(n):2字節存儲字符串長度,如果是utf-8, 則長度是3n+2

  1. EXPLAIN select * from employees where name='LiLei'
工作中遇到的99%SQL優化,這里都能給你解決方案  

  1. EXPLAIN select * from employees where name='LiLei' AND age = 22; 
工作中遇到的99%SQL優化,這里都能給你解決方案

 

  1. EXPLAIN select * from employees where name='LiLei' AND age = 22 AND position = 'manager'
工作中遇到的99%SQL優化,這里都能給你解決方案  

最左前綴法則

如果索引是多列,要最受最左前綴法則。指的是查詢從索引的最左前列開始并且不跳過索引中的列。以下三條sql根據最左前綴法則,都不會走索引。

  1. EXPLAIN select * from employees where age = 22 AND position='manager'
  2. EXPLAIN select * from employees where position ='manager'
  3. EXPLAIN select * from employees where age=17; 
工作中遇到的99%SQL優化,這里都能給你解決方案  

索引失效

不要在索引列上做任何操作(計算、函數、類型轉換),會導致索引失效而轉向全表掃描。

  1. EXPLAIN select * from employees where name='LiLei'
工作中遇到的99%SQL優化,這里都能給你解決方案  
  1. EXPLAIN select * from employees where left(name, 3)='LiLei'
工作中遇到的99%SQL優化,這里都能給你解決方案  

給hire_time增加一個普通索引:

  1. alter table `employees` ADD INDEX `idx_hire_time`(`hire_time`) USING BTREE; 
  2. EXPLAIN select * from employees where date(hire_time) = '2019-08-25'
工作中遇到的99%SQL優化,這里都能給你解決方案  

還原最初索引狀態

  1. ALTER TABLE `employees` DROP INDEX `idx_hire_time`; 

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

  1. -- EXPLAIN SELECT * FROM employees WHERE name ='LiLei' AND age=22 AND position ='manager'; 
  2. EXPLAIN SELECT * FROM employees WHERE name ='LiLei' AND age>22 AND position ='manager'
工作中遇到的99%SQL優化,這里都能給你解決方案  

看到key_len這個索引長度是78, 也就是只使用到了前兩個字段name和age,postition沒有使用到索引的。

覆蓋索引

盡量使用覆蓋索引(只訪問索引的查詢(索引列包含查詢列)),減少selelct * 語句。

  1. EXPLAIN SELECT name,age,position FROM employees WHERE name ='LiLei' AND age=22 AND position ='manager'
工作中遇到的99%SQL優化,這里都能給你解決方案  

條件判斷

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

  1. EXPLAIN SELECT * FROM employees WHERE name !='LiLei' ; 
工作中遇到的99%SQL優化,這里都能給你解決方案  

空值判斷

is null,is not null也無法使用索引

  1. EXPLAIN SELECT * FROM employees WHERE name is null
工作中遇到的99%SQL優化,這里都能給你解決方案  

like

like以通配符開頭(‘$abc’)mysql索引失效會變成全表掃描操作

  1. EXPLAIN SELECT * FROM employees WHERE name LIKE '%Lei'
工作中遇到的99%SQL優化,這里都能給你解決方案  

字符串不加單引號索引失效

  1. EXPLAIN SELECT * FROM employees WHERE name ='1000'
  2. EXPLAIN SELECT * FROM employees WHERE name =1000; 
工作中遇到的99%SQL優化,這里都能給你解決方案  

不加單引號的字符串,mysql底層會使用cust函數將其轉換為字符串,此時索引失效。

or&in少使用

少用or或in,用它查詢時,mysql不一定使用索引,mysql內部優化器會根據索引比例、表大小等多個因素整體評估是否使用索引。

  1. EXPLAIN SELECT * FROM employees WHERE name ='LiLei' or name='HanMeimei'
工作中遇到的99%SQL優化,這里都能給你解決方案  

范圍查詢優化

給年齡添加單值索引

  1. ALTER TABLE `employees`ADD INDEX `idx_age`(`age`) USING BTREE; 
  2. EXPLAIN select * from employees where age > 1 and age <= 2000; 
工作中遇到的99%SQL優化,這里都能給你解決方案  

沒有走索引原因:mysql內部優化器會根據檢索比例、表大小等多個因素整體評估是否使用索引。這個例子沒有走索引可能是因為單次數據量查詢過大導致優化器最終選擇不走索引。優化方法:可以將大的范圍拆分成多個小范圍。 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2024-10-29 09:42:50

2021-06-27 06:25:14

代碼優化技巧Java

2018-10-24 19:59:45

Kubernetes混合云云擴展

2022-10-12 15:27:19

物聯網智慧倉儲室內跟蹤

2010-10-22 14:20:35

SQL SERVER連

2016-01-26 18:01:21

2021-08-31 07:57:21

輪詢鎖多線編程Java

2017-08-01 05:44:10

Dockerweave虛擬機

2017-08-03 09:37:35

SparkStreamKafkaDirect

2009-12-01 08:55:53

2021-07-15 08:12:31

體系感面試邏輯思維

2021-06-18 10:45:29

Java內存泄漏C++

2017-06-23 11:20:00

DockerWeave內核

2014-02-26 09:18:47

應用交付優化服務水平協議

2021-02-23 10:34:51

Java 編程開發

2013-03-14 11:18:30

Microsoft A解決方案

2010-08-23 16:13:11

DHCP服務器

2011-05-30 20:37:53

2011-05-30 19:15:37

醫療行業浪潮醫療云云計算

2011-05-30 20:26:48

廣電云浪潮云海戰略行業云
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久网 | 精品一二区| av入口| 精品熟人一区二区三区四区 | 国产欧美精品一区二区 | 国产精品国产精品国产专区不卡 | 少妇诱惑av | 国产黄色小视频在线观看 | 国产精品日韩欧美一区二区三区 | 精品动漫一区 | 久久中文字幕电影 | 精品一区二区久久久久久久网站 | 日韩毛片免费视频 | 国产一区二区精品 | 亚洲视频网 | 久久国产精品久久久久 | 91精品国产综合久久久动漫日韩 | 国产日韩欧美一区二区 | 久久中文字幕一区 | 日韩视频一区 | 日韩精品一区二区三区在线播放 | 欧美一区二区三区小说 | 日韩一区中文字幕 | 午夜在线 | 欧美国产日韩一区 | 男女搞网站 | 欧美视频三级 | 在线播放国产一区二区三区 | 日本a视频 | 久久久久久久久久久国产 | 欧美极品视频在线观看 | 精品久久久久久久久久久久久久久久久 | 天天射天天干 | 久久久久成人精品 | 精品伊人久久 | 成人一区在线观看 | 国产一极毛片 | 人人干人人艹 | 色婷婷一区二区三区四区 | 欧美a在线观看 | 午夜激情在线视频 |