MYSQL資料庫,如何用一條實現效率高的多結果查詢。就是要一條綜合語句執行的時間比分開執行效率高

2022-03-16 05:41:56 字數 4498 閱讀 6855

1樓:匿名使用者

zwb12340 說的就是錯的

首先來說一下你的這兩種寫法

1.這一個比較快,其實這是把兩個sql 拼接成1個sql,但是在拼接的時候使用了union ,這個過程會排序去重複,這一點上會影響效能。可以把union 改成union all,union all不會排序去重,可能效率會更好一點

2.這一個不會太快,因為使用in的話,預設是不使用索引的,那麼這一個過程會全表掃描,那麼就很慢了(我這裡說的索引是預設的b+樹索引,是自動遮蔽的,如果是bitmap索引的話,是會使用的),

對於你這個問題的解決,我給以下幾個意見

1.首先把union改成union all試一試,看效率怎麼樣2.檢查是否在product上有沒有索引,儘量建一個索引3.

如果以上兩個改進之後,還沒效果的話,可以在這個表上,基於product建立分割槽表,使用分割槽表的話,那麼效果會比較明顯

2樓:匿名使用者

樓上說反了吧?第一種效率高點。

1. select * from `vendor` where product=1 union select * from `vendor` where product=2

2. select * from `vendor` where product in (1,2)

上述語句的執行時間和分別執行兩個product分別查詢的時間總和一樣。

不對,這兩個執行查詢時間不一樣。當然,索引情況下,差別不大。非索引情況下,union的時間會比in的方式時間少。 一般不採用in。

執行查詢的時間,不僅跟資料量有關,也跟資料結構有關。一般推薦使用union。in是需要一個一個對比的判斷,union不需要這個判斷,union直接把結果集放在一起。所以快一點。

3樓:匿名使用者

1.第一個寫法太爛了,在一個表中不需要這樣;

2,第二個寫法效率已經很高了;

3;將product建立索引,將提高查詢效率很多4.不是查詢資料需要儘量不要select *5.檢測查詢效率,資料庫要有足夠的記錄數,少了沒有效果,怎麼寫,查詢時間幾乎都是一樣

4樓:退伍的工科平民

建索引!沒有索引,任何資料庫都會做全表掃描,就是遍歷200萬條資料,否則資料庫系統不能肯定是不是有符合要求的資料漏掉。2的20次方是100萬,如果是折半查詢,21次查詢操作就可以找到你要的單個資料。

而寫法1和寫法2的效率相差就是2倍不到,所以建好索引效率查上千倍。

不要糾纏在哪種寫法上!

寫法2絕對比寫法1要快。in是不是不用索引我不知道,不同資料庫可能不一樣。我就不明白為什麼不用 product=1 or product=2 呢?

這個肯定會用索引的,如果有索引的話。

不管 in 還是 product=1 or product=2 都是在一次全表掃描中就可以直接實現了的。

而用union、union all,即便利用到第一次全表掃描的執行結果,還是:全表掃描-》排序-》再查詢,就是說如果沒有索引,1次全表掃描肯定是逃不掉的。

5樓:匿名使用者

我認為你應該為其列建立一個索引(如果該列的值是唯一的那麼建立聚集索引否則非聚集索引(unclustered))這樣速度更高些同事也不能用*號 最好採取所需要查詢的資訊列名

mysql資料庫如何用一條語句同時查多個資料庫

6樓:匿名使用者

1. 子查詢方法

select *

from db2.table2

where 欄位 in (select table1中相應欄位 from db1.table1 where table1中相應欄位=相應值)

2. 左連線方法

select table2.*

from db2.table2 left join db1.table1

on table1.欄位 = table2.相應欄位where table2.相應欄位 = 相應值;

2. 交叉連線方法

select table2.*

from db2.table2, db1.table1where table1.欄位 = table2.相應欄位 and table2.相應欄位 = 相應值;

怎樣在mysql資料庫中設定可以顯示每條sql語句的執行時間?

7樓:匿名使用者

set statistics time on

select * from table

8樓:小海哥

set statistics time on

select * from table

sql資料庫查詢中滿足任何一個條件,使用or還是多條語句效率高?

9樓:喜歡選擇的

三條語句不僅效率低

並且還有一個缺點:冗餘的資料

因為可能有一行, 既滿足 name='@info',又滿足 address='@info' 。

這兩個語句會把這同一行都取出一份, 還需要自己手工去排除掉。

所以還是推薦前面的用or連線的語句。

10樓:匿名使用者

用or ,因為用or執行完資料直接全出來,如果你用分次的話你還得對資料進行處理,排序,這樣肯定慢

11樓:匿名使用者

執行一條語句, 比執行3條語句.

顯然是 一句 效率高.

除非你是 3個 查詢條件都一樣, 只是 引數不一樣.

那麼 可能 3句 union all 的時候, 速度會比 in 快一點。

12樓:仔仔是隻狗

當然是一條語句效率高

因為一條語句 也就意味著只對該表中的資料執行一次從頭到尾的查詢

三條語句的話,要對該表資料執行三次查詢

13樓:綉乞群群

sql中可以以多個and或or,當條件混亂時,可以使用括號。

如a and (b or c)這樣的。

補充語句可以修改為:

sql="select top 16 * from tb_goods where id not in (select top "+(nowpage*16)+" id from tb_goods where classes='"+classes2+"' and price<=500 order by id asc)and classes='"+classes2+"' and price<=500 order by id asc";

如何使用一條mysql語句實現如果查詢到的資料不存在就建立

14樓:山頂與山腳

一條語句實復現的方法不制如儲存過程方便,而且不如儲存過程效率高,樓主寫個儲存過程會比較好

insert into log (date, ip) select '2014-01-01' as date, '192.168.1.

1' as ip from log where not exists ( select * from log t where t.data = '2014-01-01' and t.ip = '192.

168.1.1')

15樓:匿名使用者

-- 我這裡

抄假襲設你那個bai  id 是du

自動遞增

zhi的主

dao鍵.

insert into log (date,  ip)select  '2014-01-01', '192.168.1.1'

from  dual

where  not  exists (

select *

from log  t

where  t.data = '2014-01-01'  and  t.ip = '192.168.1.1')

16樓:風華少年

這裡有答案

存在則更新,否則新增(on duplicate key update)(mysql)

17樓:匿名使用者

你把這張表的來 date和ip欄位聯合設定為唯一索源引。

alter table `

bailog` add unique `date_ip` (`date`, `ip`);

然後你du就大膽的insert資料吧。有zhi重複的就報錯插入失dao

敗。然後接著插入下一條就ok。

18樓:匿名使用者

insert into log (date, ip) select '2014-01-01' as date, '192.168.1.

1' as ip from log where not exists (

select *

from log t

where t.data = '2014-01-01' and t.ip = '192.168.1.1')

mysql資料庫連線失敗,如何輕鬆解決MYSQL資料庫連線過多的錯誤

include config.php 這一行應該沒有讀到config檔案吧,或者提供的mysql登入密碼錯誤 你的資料庫和專案是不是不在同一臺機器上啊。如果是這樣的話,檢查下mysql的 是否允許遠端訪問 的配置項。應該不是程式的問題,是mysql資料庫 root使用者 沒授權!無法連線mysql資...

MFC如何遠端連線mysql資料庫,主要是VS需要修改包含目

摳 odbc連線是在系統設定裡設定所連線的資料庫的,因此對應用程式來講,odbc的名字才是所關心的。至於odbc連線到哪個資料庫,應用程式不需要關心。也就是說odbc資料庫是對應用程式透明的。關於vs2010連線mysql資料庫的問題,語言是c 去塵遠 我遇到過這個問題。出現這個問題後,根據網上提供...

如何建立mysql資料庫的連線,如何建立MYSQL資料庫的連線?

1 首先在電腦端安裝mysql,然後進行資訊配置操作。開啟該軟體,如圖所示。2 然後點選選單欄下的檔案選項按鈕,進行建立連線,點選新建連線選項按鈕。3 然後進行測試連線,在彈出的新建連線對話方塊中要填寫資訊,單擊 測試連線 彈出 連線成功 即可。4 接著填寫內容,在剛才建立的連線中,有很多的資料,右...