Mysql數(shù)據(jù)庫(kù)使用from與join兩表查詢(xún)的方法區(qū)別總結(jié)
文章主要給大家介紹了關(guān)于mysql使用from與join兩表查詢(xún)的區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面...
前言
在mysql中,多表連接查詢(xún)是很常見(jiàn)的需求,在使用多表查詢(xún)時(shí),可以from多個(gè)表,也可以使用join連接連個(gè)表
這兩種查詢(xún)有什么區(qū)別?哪種查詢(xún)的效率更高呢? 帶著這些疑問(wèn),決定動(dòng)手試試
1.先在本地的mysql上先建兩個(gè)表one和two
one表
CREATE
TABLE
`one` (
`id`
int
(0)
NOT
NULL
AUTO_INCREMENT,
`one`
varchar
(100)
NOT
NULL
,
PRIMARY
KEY
(`id`)
) ENGINE = InnoDB
CHARACTER
SET
= utf8;
two表
CREATE
TABLE
`two` (
`id`
int
(0)
NOT
NULL
AUTO_INCREMENT,
`two`
varchar
(100)
NOT
NULL
,
PRIMARY
KEY
(`id`)
) ENGINE = InnoDB
CHARACTER
SET
= utf8;
先隨便插入幾條數(shù)據(jù),查詢(xún)看一下;
select
one.id,one.one,two.id,two.two
from
one,two
where
one.id=two.id;
select
one.id,one.one,two.id,two.two
from
one
join
two
on
one.id=two.id;
對(duì)比這兩次的查詢(xún),查詢(xún)時(shí)間幾乎沒(méi)有區(qū)別,查看sql運(yùn)行分析,也沒(méi)有區(qū)別
為了突出兩種查詢(xún)的性能差異,往one表中插入100w條數(shù)據(jù),往two表中插入10w條數(shù)據(jù),在大量數(shù)據(jù)面前,一絲一毫的差別也會(huì)被無(wú)限放大;這時(shí)候在來(lái)比較一下差異
先使用python往數(shù)據(jù)庫(kù)中插入數(shù)據(jù),為啥用python,因?yàn)閜ython寫(xiě)起了簡(jiǎn)單
上代碼
import pymysql
db = pymysql.
connect
(
"127.0.0.1"
,
'root'
,
"123456"
,
"bruce"
)
cursor
= db.
cursor
()
sql =
"INSERT INTO one (one) values (%s)"
for
i
in
range(1000000):
cursor
.executemany(sql, [
'one'
+ str(i)])
if i % 10000 == 0:
db.
commit
()
print(str(i) +
'次 commit'
)
db.
commit
()
print(
'insert one ok'
)
sql2 =
"INSERT INTO two (two) values (%s)"
for
i
in
range(100000):
cursor
.executemany(sql2, [
'two'
+ str(i)])
if i % 10000 == 0:
db.
commit
()
print(str(i) +
'次 commit'
)
db.
commit
()
print(
'insert two ok'
)
耐心等待一會(huì),插入需要一些時(shí)間;
等數(shù)據(jù)插入完成,來(lái)查詢(xún)一些看看
先使用FROM兩個(gè)表查詢(xún)
select
one.id,one.one,two.id,two.two
from
one,two
where
one.id=two.id;
用時(shí)大約20.49;
再用JOIN查詢(xún)看一下
select
one.id,one.one,two.id,two.two
from
one
join
two
on
one.id=two.id;
用時(shí)19.45,在10w條數(shù)據(jù)中,1秒的誤差并不算大,
查看一下使用id作為條件約束時(shí)的查詢(xún)
查詢(xún)時(shí)間沒(méi)有差別
再看一下sql執(zhí)行分析
結(jié)果還是一樣的
總結(jié)
在mysql中使用FROM查詢(xún)多表和使用JOIN連接(LEFT JOIN,RIGHT JOIN除外),查詢(xún)結(jié)果,查詢(xún)效率是一樣的
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值。
- Sql Server數(shù)據(jù)庫(kù)類(lèi)似正則表達(dá)式的字符處理問(wèn)題
- SQL Server數(shù)據(jù)庫(kù)中表和索引結(jié)構(gòu)存儲(chǔ)的原理及如何加快
- SQL Server Page數(shù)據(jù)庫(kù)結(jié)構(gòu)深入分析
- 基于Sql server數(shù)據(jù)庫(kù)的四種分頁(yè)方式總結(jié)
- SQL Server 2016數(shù)據(jù)庫(kù)快照代理過(guò)程詳解
- 關(guān)于SQL Serve數(shù)據(jù)庫(kù)r帳號(hào)被禁用的處理方法
- SQL數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化技巧提升網(wǎng)站訪問(wèn)速度的方法
- SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)中的SSIS 延遲驗(yàn)證方法
- SQL Server數(shù)據(jù)庫(kù)建立新用戶及關(guān)聯(lián)數(shù)據(jù)庫(kù)的方法教程
- Oracle數(shù)據(jù)庫(kù)多條sql執(zhí)行語(yǔ)句出現(xiàn)錯(cuò)誤時(shí)的控制方式
Sql Server數(shù)據(jù)庫(kù)類(lèi)似正則表達(dá)式的字符處理問(wèn)題
SQL Serve提供了簡(jiǎn)單的字符模糊匹配功能,比如:like, patindex,不過(guò)對(duì)于某些字符處理場(chǎng)景還顯得并不足夠,日常碰到的幾個(gè)問(wèn)題有:...
SQL Server數(shù)據(jù)庫(kù)中表和索引結(jié)構(gòu)存儲(chǔ)的原理及如何加快搜索速度分析
本文詳細(xì)分析了SQL Server中表和索引結(jié)構(gòu)存儲(chǔ)的原理以及對(duì)于如何加快搜索速度和提高效率等方面做了詳細(xì)的分析,以下是主要內(nèi)容。...
SQL Server Page數(shù)據(jù)庫(kù)結(jié)構(gòu)深入分析
SQL Server存儲(chǔ)數(shù)據(jù)的基本單元是Page,每一個(gè)Page的大小是8KB,數(shù)據(jù)文件是由Page構(gòu)成的。在同一個(gè)數(shù)據(jù)庫(kù)上,每一個(gè)Page都有一個(gè)唯一的資源標(biāo)識(shí),標(biāo)識(shí)符由三部分組成...
基于Sql server數(shù)據(jù)庫(kù)的四種分頁(yè)方式總結(jié)
下面小編就為大家分享一篇基于sqlserver的四種分頁(yè)方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧。...
SQL Server 2016數(shù)據(jù)庫(kù)快照代理過(guò)程詳解
本文我們通過(guò)SQL Server 2016一個(gè)實(shí)例數(shù)據(jù)表,給大家詳細(xì)分析了快照代理過(guò)程遇到的問(wèn)題和解決辦法,并對(duì)快照生成過(guò)程做了詳細(xì)說(shuō)明,以下是全部?jī)?nèi)容:...
關(guān)于SQL Serve數(shù)據(jù)庫(kù)r帳號(hào)被禁用的處理方法
若發(fā)現(xiàn)SQL Serve所有帳號(hào)不小心被禁用了,這個(gè)時(shí)候怎么辦?用重裝嗎?不用,仔細(xì)看小白是怎么一步一步解開(kāi)這個(gè)謎題的。首先需要Windows帳號(hào)設(shè)置里重新添加一個(gè)新帳號(hào)。并將其添加到...
SQL數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化技巧提升網(wǎng)站訪問(wèn)速度的方法
在這篇文章中,我將介紹如何識(shí)別導(dǎo)致性能出現(xiàn)問(wèn)題的查詢(xún),如何找出它們的問(wèn)題所在,以及快速修復(fù)這些問(wèn)題和其他加快查詢(xún)速度的方法。 你一定知道,一個(gè)快速訪問(wèn)的網(wǎng)站能讓用...
SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)中的SSIS 延遲驗(yàn)證方法
驗(yàn)證是一個(gè)事件,該事件在Package執(zhí)行時(shí),第一個(gè)被觸發(fā),驗(yàn)證能夠避免SSIS引擎執(zhí)行一個(gè)有異常的Package或Task。延遲驗(yàn)證(DelayValidation)是把驗(yàn)證操作延遲到Package真正運(yùn)行(run-ti...
SQL Server數(shù)據(jù)庫(kù)建立新用戶及關(guān)聯(lián)數(shù)據(jù)庫(kù)的方法教程
本文講的是SQLserver數(shù)據(jù)庫(kù)創(chuàng)建新用戶方法以及賦予此用戶特定權(quán)限的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下...
Oracle數(shù)據(jù)庫(kù)多條sql執(zhí)行語(yǔ)句出現(xiàn)錯(cuò)誤時(shí)的控制方式
多條sql執(zhí)行時(shí)如果在中間的語(yǔ)句出現(xiàn)錯(cuò)誤,后續(xù)會(huì)不會(huì)直接執(zhí)行,如何進(jìn)行設(shè)定,以及其他數(shù)據(jù)庫(kù)諸如Mysql是如何對(duì)應(yīng)的,這篇文章將會(huì)進(jìn)行簡(jiǎn)單的整理和說(shuō)明。環(huán)境準(zhǔn)備使用Oracle的精簡(jiǎn)...