前言
在mysql中,多表連接查詢是很常見的需求,在使用多表查詢時,可以from多個表,也可以使用join連接連個表
這兩種查詢有什么區(qū)別?哪種查詢的效率更高呢? 帶著這些疑問,決定動手試試
1.先在本地的mysql上先建兩個表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ù),查詢看一下;
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;
對比這兩次的查詢,查詢時間幾乎沒有區(qū)別,查看sql運行分析,也沒有區(qū)別
為了突出兩種查詢的性能差異,往one表中插入100w條數(shù)據(jù),往two表中插入10w條數(shù)據(jù),在大量數(shù)據(jù)面前,一絲一毫的差別也會被無限放大;這時候在來比較一下差異
先使用python往數(shù)據(jù)庫中插入數(shù)據(jù),為啥用python,因為python寫起了簡單
上代碼
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'
)
耐心等待一會,插入需要一些時間;
等數(shù)據(jù)插入完成,來查詢一些看看
先使用FROM兩個表查詢
select
one.id,one.one,two.id,two.two
from
one,two
where
one.id=two.id;
用時大約20.49;
再用JOIN查詢看一下
select
one.id,one.one,two.id,two.two
from
one
join
two
on
one.id=two.id;
用時19.45,在10w條數(shù)據(jù)中,1秒的誤差并不算大,
查看一下使用id作為條件約束時的查詢
查詢時間沒有差別
再看一下sql執(zhí)行分析
結(jié)果還是一樣的
總結(jié)
在mysql中使用FROM查詢多表和使用JOIN連接(LEFT JOIN,RIGHT JOIN除外),查詢結(jié)果,查詢效率是一樣的
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值。
- Sql Server數(shù)據(jù)庫類似正則表達(dá)式的字符處理問題
- SQL Server數(shù)據(jù)庫中表和索引結(jié)構(gòu)存儲的原理及如何加快
- SQL Server Page數(shù)據(jù)庫結(jié)構(gòu)深入分析
- 基于Sql server數(shù)據(jù)庫的四種分頁方式總結(jié)
- SQL Server 2016數(shù)據(jù)庫快照代理過程詳解
- 關(guān)于SQL Serve數(shù)據(jù)庫r帳號被禁用的處理方法
- SQL數(shù)據(jù)庫查詢優(yōu)化技巧提升網(wǎng)站訪問速度的方法
- SQL數(shù)據(jù)庫開發(fā)中的SSIS 延遲驗證方法
- SQL Server數(shù)據(jù)庫建立新用戶及關(guān)聯(lián)數(shù)據(jù)庫的方法教程
- Oracle數(shù)據(jù)庫多條sql執(zhí)行語句出現(xiàn)錯誤時的控制方式