搜尋
首頁資料庫mysql教程关于子查询和连接的趣味小题目

今天有位同学出来一个趣味小题。 A: select title from simplified where id in (select id from analysis where word = something); B: select b.title from analysis a join simplified b on (a.id=b.id) where a.word=something; C: select simplified

今天有位同学出来一个趣味小题。

A:
select title
from simplified
where id in (select id
                  from analysis
                  where word = ‘something’);
B:
select b.title
from  analysis a
join simplified b
on (a.id=b.id)
where a.word=’something’;
C:
select simplified.title
from  analysis
join simplified
on (analysis.id=simplified.id)
where analysi.word=’something’;

上面的3段sql,在MYSQL中执行,哪一个效率最优,请讲出原因

看到这个问题,我想起了之前作面试官的时候,也问过这里的问题。从另一个角度,我收集了大家面对这题目的时候一些思考,总结成下面的一个面试小故事。

这类题目真得蛮适合面试的时候考察对sql的掌握程度。

模拟一个场景,面试者:小白,面试官:小二,下面开始这段面试过程…..

小二:…. 我这里有个小问题,你看看(给出上面3段sql),balabala。。。。

小白:这2个表数据量如何了,join ,子查询的优化根据数据量可能还有所不一样吧。子查询适合外结果集大,子查询结果集小的情况,最好是能保证子查询所返回的结果集尽量的小。

小二:假设2表,数据量差不多,都是万条记录左右。

小白:如果是这种的话,A应该会慢一点吧。 如果是在mysql上执行的话,A中子查询语句会认为与外面的simolified表进行关联比较有效率。这样的话A其实就回被翻译成:

select title from simplified where exists (select simplified.title from analysis where word= ‘something’ and id =simplified .id);

这种in子查询的形式,在外部表(比如上面的simplified )数据量较大的时候效率是很差的.

小二: 恩,那么B和C之间有什么区别呢?

小白:B和C在我看来,应该是差不多的,其主要区别就是B采用了别名。但是我认为应该是没多大影响的。 

因为数据库本身执行时,都会再把表名给换成自己的别名。但我影响中好像记得有一条数据库的优化建议是尽量多表连接,最好是使用表的别名来引用列。

对了,有对id建索引吧。

小二: 2表id都是主键,这算是建了索引吗?

小白: 是的,主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

小二:  恩,一张表只能有一个主键,是不是就可以说只能有一个唯一的索引呢?

小白:  不对,主键一定是唯一性索引,唯一性索引并不一定就是主键,主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。

小二: 主键列和唯一索引列还有区别吗?

小白:应该有,我知道的主键列不允许空值,而唯一性索引列允许空值。一个表中可以有多个唯一性索引,但只能有一个主键。

小二: 恩,回到上面的问题,你记得多表连接,最好使用表的别名来引用列,哪你有想过会是什么原因导致的呢?

小白:我估计应该是Mysql内部处理逻辑有关吧,有可能是使用了别名,就会再建一个临时表放入内存,这样后面的命中会更高。

小二:  差不多吧,mysql引擎自动生成temp表,造成缓存的效果。从这个sql,你大致应该能明白它的意图了,你想想有没有更优的写法,可以试试看…

小白: 好的,我想想…..

小白:  

select b.title from
(select id from  analysis where word=’something’)a,
 simplified b
where a.id=b.id;

如果这么去写,应该是最快的。放弃子查询和join。

小二: 恩,不错…..

。。。。。。

如果我在面试中碰到这样的小白,绝对会留下深刻的影响。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
解釋酸的特性(原子,一致性,隔離,耐用性)。解釋酸的特性(原子,一致性,隔離,耐用性)。Apr 16, 2025 am 12:20 AM

ACID屬性包括原子性、一致性、隔離性和持久性,是數據庫設計的基石。 1.原子性確保事務要么完全成功,要么完全失敗。 2.一致性保證數據庫在事務前後保持一致狀態。 3.隔離性確保事務之間互不干擾。 4.持久性確保事務提交後數據永久保存。

MySQL:數據庫管理系統與編程語言MySQL:數據庫管理系統與編程語言Apr 16, 2025 am 12:19 AM

MySQL既是數據庫管理系統(DBMS),也與編程語言緊密相關。 1)作為DBMS,MySQL用於存儲、組織和檢索數據,優化索引可提高查詢性能。 2)通過SQL與編程語言結合,嵌入在如Python中,使用ORM工具如SQLAlchemy可簡化操作。 3)性能優化包括索引、查詢、緩存、分庫分錶和事務管理。

mySQL:使用SQL命令管理數據mySQL:使用SQL命令管理數據Apr 16, 2025 am 12:19 AM

MySQL使用SQL命令管理數據。 1.基本命令包括SELECT、INSERT、UPDATE和DELETE。 2.高級用法涉及JOIN、子查詢和聚合函數。 3.常見錯誤有語法、邏輯和性能問題。 4.優化技巧包括使用索引、避免SELECT*和使用LIMIT。

MySQL的目的:有效存儲和管理數據MySQL的目的:有效存儲和管理數據Apr 16, 2025 am 12:16 AM

MySQL是一種高效的關係型數據庫管理系統,適用於存儲和管理數據。其優勢包括高性能查詢、靈活的事務處理和豐富的數據類型。實際應用中,MySQL常用於電商平台、社交網絡和內容管理系統,但需注意性能優化、數據安全和擴展性。

SQL和MySQL:了解關係SQL和MySQL:了解關係Apr 16, 2025 am 12:14 AM

SQL和MySQL的關係是標準語言與具體實現的關係。 1.SQL是用於管理和操作關係數據庫的標準語言,允許進行數據的增、刪、改、查。 2.MySQL是一個具體的數據庫管理系統,使用SQL作為其操作語言,並提供高效的數據存儲和管理。

說明InnoDB重做日誌和撤消日誌的作用。說明InnoDB重做日誌和撤消日誌的作用。Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?Apr 15, 2025 am 12:15 AM

EXPLAIN命令的關鍵指標包括type、key、rows和Extra。 1)type反映查詢的訪問類型,值越高效率越高,如const優於ALL。 2)key顯示使用的索引,NULL表示無索引。 3)rows預估掃描行數,影響查詢性能。 4)Extra提供額外信息,如Usingfilesort提示需要優化。

在解釋中使用臨時狀態以及如何避免它是什麼?在解釋中使用臨時狀態以及如何避免它是什麼?Apr 15, 2025 am 12:14 AM

Usingtemporary在MySQL查詢中表示需要創建臨時表,常見於使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通過優化索引和重寫查詢避免其出現,提升查詢性能。具體來說,Usingtemporary出現在EXPLAIN輸出中時,意味著MySQL需要創建臨時表來處理查詢。這通常發生在以下情況:1)使用DISTINCT或GROUPBY時進行去重或分組;2)ORDERBY包含非索引列時進行排序;3)使用複雜的子查詢或聯接操作。優化方法包括:1)為ORDERBY和GROUPB

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器