<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
例1: 沒有攜帶on
的條件字句,此條slq查詢的結構集等價於,a
表包含的條數*b
表包含的乘積:
select * from table a cross join table b;
例2:擁有攜帶on字句
的sql,等價於inner join
:
select * from table a cross join table b on a.id=b.id;
規則;表包含的資料較少的資料量,作為驅動表(小表驅動大表,一般mysql的優化器會做出相應的優化的,但是為了防止一些抽風現象可以用STRAIGHT_JOIN,作用會強制使用左邊的表作為驅動表)。
例1:
select * from table c straight_join table d on c.id=d.id;
覆蓋索引:
select 主鍵欄位或者建立過索引的欄位 from table limit 300000,10
索引覆蓋+inner (業界常用的優化方案)
select * from table a inner join ( select 建立索引的欄位 from table limit 30000,10) b on b.建立索引的欄位=a.建立索引的欄位 (也可以更換為 using (建立索引的欄位))
索引覆蓋+子查詢 先獲取分頁起始的最小值,然後再獲取後10條 (業界常用的優化方案)
select * from table where 主鍵欄位或者建立過索引的欄位 >= (select 主鍵欄位或者建立過索引的欄位 from table 300000,1) limit 10;
範圍查詢+limit語句 獲取上一頁的主鍵最大值,然後進行獲取後面的資料;
例1; 上一頁的最大主鍵值為100
select * from table where id > 100 limit 10;
需要獲取起始主鍵值和結束主鍵值
select * from table where id between 起始主鍵值 and 結束主鍵值;
禁止傳入過大的頁碼 (例如;百度就是採用這種方式)
範例1:
/** * 1:如果不包含非主鍵的索引,就會使用主鍵索引 * 2:如果包含非主鍵的索引就會使用非主鍵索引; * 3:如果存在多個非主鍵索引,會使用key_len值較小的索引 * 為什麼會有這種規律呢? * -innodb非主鍵索引:葉子結點儲存的是:索引+主鍵 * 主鍵索引葉子結點儲存的是:主鍵+表資料 * 在1page裡面,非主鍵索引可以儲存更多的條目,對於一張表,假如擁有10000000資料 * 使用非主鍵索引,掃描page 500,主鍵索引 100 非主鍵索引掃描的條目多,可以減少掃描的次數 * **/ select count(*) from table
範例2:
/** * count(欄位) 只會針對該欄位進行統計,使用這個欄位上的索引(如果包含索引的情況) * count(子段) 會排出欄位值為null的資料 * count(*) 不會排出欄位值為null的資料 * count(*) 和 count(1) 沒有區別 * 對於MyISAM引擎,如果 count(*) 沒有where條件,查詢效率會特別的快,因為把資料儲存到MyISAM引擎裡了 * 對於MySQL 8.0.13,InnoDB引擎,如果count(*) 沒有where條件查詢速度,也是特別的快,做出了相應的優化 * * **/ select count(某個欄位) from table 會把此欄位的值為null過濾掉,僅僅只統計欄位值不為null的
範例3:
//做完本條查詢,去執行count的操作 select sql_calc_found_rows * from table limit 0,10; select found_rows() as count ; 通過此sql來獲取count的結果(須在終端進行執行)
注意:缺點在mysql8.0.17這種用法已經被廢棄,未來會被永久刪除
範例4:優點不操作具體的表,無論表的資料量有多大,都可以迅速執行. 缺點:統計的是一個估算值,適合要求統計數的精度不是太高的場景。
select * from information_schema.TABLES where TABLE_SCHEMA='資料庫名稱' and TABLE_NAME ='表的名稱';
範例5: //優點不操作具體的表,無論表的資料量有多大,都可以迅速執行. 缺點:統計的是一個估算值,適合要求統計數的精度不是太高的場景。
show table status where NAME='表的名稱隔行'
範例6: //優點不操作具體的表,無論表的資料量有多大,都可以迅速執行. 缺點:統計的是一個估算值,適合要求統計數的精度不是太高的場景。
explain select * from table
範例7: 優化案例; 目前有一張數量非常大的表,需要統計id值大於100的有多少條
select count(*) from table where id>100;
。select count()-(select count() from table where id <100) from table
。//first_name,last_name已經在表裡建立了組合索引,emp_no為主鍵;
範例1:
//此sql是不能利用到索引的,原因是:mysql的優化器,是根據成本計算的,如果全表掃描比使用索引,成本更低時會使用全表掃描 //如何鑑定是否使用索引避免了排序呢? 通過explain 檢視sql的效能如果Extra的值為null時,說明是可以通過索引避免排序的.如果Extra的值是Using filesort 是不可以進行索引排序的 select * from table order by first_name,last_name; //此sql可以使用索引避免排序的 select * from table order by first_name,last_name limit 10; //此sql可以使用索引避免排序的 /** *[Bader,last_name,emp_no] *[Bader,last_name,emp_no] *[Bader,last_name,emp_no] *[Bader,last_name,emp_no] * **/ select * from table where fist_name='Bader' order by last_name; //此sql可以使用索引避免排序的 /** *[Bader,last_name,emp_no] *[Ba,last_name,emp_no] *[Bad,last_name,emp_no] *[Bade,last_name,emp_no] * **/ select * from table where fist_name<'Bader' order by last_name //此sql可以使用索引避免排序的 select * from table where fist_name='Bader' and last_name>'Peng' order by last_name //此sql可以使用索引避免排序的,原因排序的倆個欄位,分別存在倆個索引中 select * from table order by first_name,emp_no;
索引失效的場景:
範例1:
select * from employees e left join dept_emp de on e.emp_no=de.emp_no left join departments d on de.dept_no=d.dept_no where e.emp_no=1001;
拆分後:
select * from employees where emp_no='1001'; select * from dept_emp where emp_no='1001'; select * from departments where dept_no='d005';
表的設計原則-三正規化:
到此這篇關於SQL效能優化方法及效能測試的文章就介紹到這了,更多相關SQL效能優化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45