簡體   English   中英

如何在不丟失數據的情況下優化SQL查詢?

[英]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 (= ticketidswtickes表)。

如果customfieldid = 6,然后fieldvalue保存用戶的全名

如果customfieldid = 7,則fieldvalue保持用戶的手機號碼

如果我在此表中查詢typeid=98765

我將獲得9行都有SAME的typeid和不同的值fieldvaluecustomfieldid等..

我希望從此結果(9行)中獲得fieldvalue customfieldid=6fieldvalue值,但是僅當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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM