[英]How to optimize SQL query without losing data?
我正在使用MySQL查詢數據庫表。
我終於發現以下查詢返回了我想要的數據庫信息。 (我不是SQL專家)
SELECT * FROM ( SELECT swtickets.ticketid, swtickets.ticketstatustitle, swtickets.departmenttitle, swtickets.subject, swtickets.dateline, swtickets.ownerstaffname, swtickets.lastreplier, swcustomfieldvalues.fieldvalue, swcustomfieldvalues.customfieldid FROM swtickets, swcustomfieldvalues WHERE swcustomfieldvalues.typeid=swtickets.ticketid AND swtickets.ticketid IN (SELECT typeid FROM `swcustomfieldvalues` WHERE `fieldvalue`=12345678)) as tbl
where tbl.customfieldid=123
但是,以上查詢需要很長時間才能在phpMyAdmin中顯示結果。
Showing rows 0 - 24 (32 total, Query took 7.1488 sec)
是否可以將該查詢優化為快於7秒?
這是我的SQLFiddle:
http://sqlfiddle.com/#!9/d3b5a2
更多說明:
表: swcustomfieldvalues
customfieldvalueid
customfieldid
typeid <— This field is not unique in this table
fieldvalue
isserialized
isencrypted
dateline
uniquehash
lastupdated
對於每一票,我在9個自定義字段swcustomfieldvalues
每張票全部9個自定義字段SAME typeid
(= ticketid
在swtickes
表)。
如果customfieldid
= 6,然后fieldvalue
保存用戶的全名
如果customfieldid
= 7,則fieldvalue
保持用戶的手機號碼
如果我在此表中查詢typeid=98765
我將獲得9行都有SAME的typeid和不同的值fieldvalue
和customfieldid
等..
我希望從此結果(9行)中獲得fieldvalue
customfieldid=6
的fieldvalue
值,但是僅當fieldvalue=1234567
其中fieldvalue=1234567
customfieldid=7
我的查詢中已經有該值1234567
,所以我不在乎它是否在結果中列出。
更多說明:
當前所有答案均成功獲取了查詢中提供的具有移動電話號碼的每張票證的這些行集,以及“ swtickets”表中的其他票證出軌。
到目前為止,我們正在做什么:搜索(查詢)是在customfieldid = 7和fieldvalue = 0555的條件下執行的。
一切順利。 但是我不希望字段值出現在結果上(我不在乎),我希望名稱出現在行結果中。
僅在fieldvalue
,我需要具有fieldvalue
customfieldid=6
的行的fieldvalue
:
fieldvalue=0555
customfieldid=7
的行的fieldvalue=0555
兩個查詢的結果(“我的”和“答案上的答案”):
您可以使用類似的方法簡化操作,
SELECT
swtickets.ticketid,
swtickets.ticketstatustitle,
swtickets.departmenttitle,
swtickets.subject,
swtickets.dateline,
swtickets.ownerstaffname,
swtickets.lastreplier,
swcustomfieldvalues.fieldvalue,
swcustomfieldvalues.customfieldid
FROM swtickets
LEFT JOIN swcustomfieldvalues
ON
swcustomfieldvalues.typeid = swtickets.ticketid
AND
swcustomfieldvalues.fieldvalue = 12345678
AND
swcustomfieldvalues.customfieldid = 123
嘗試這個
select swtickets.ticketid, swtickets.ticketstatustitle, swtickets.departmenttitle, swtickets.subject, swtickets.dateline, swtickets.ownerstaffname, swtickets.lastreplier, swcustomfieldvalues.fieldvalue, swcustomfieldvalues.customfieldid
from swtickets
join swcustomfieldvalues ON (swtickets.ticketid = swcustomfieldvalues.typeid)
where swcustomfieldvalues.fieldvalue = 12345678 and swcustomfieldvalues.customfieldid=123
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.