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 接著填寫內容,在剛才建立的連線中,有很多的資料,右...