亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

測試MySQL表中是否存在行的最佳方法

測試MySQL表中是否存在行的最佳方法

瀟湘沐 2019-07-01 15:56:58
我試圖找出表中是否存在一行。使用MySQL,這樣的查詢更好嗎:SELECT COUNT(*) AS total FROM table1 WHERE ...并檢查總數是否為非零,還是執行如下查詢更好:SELECT * FROM table1 WHERE ... LIMIT 1檢查是否返回了行?在這兩個查詢中,WHERE子句都使用索引。測試MySQL表中是否存在行的最佳方法
查看完整描述

3 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

您也可以嘗試使用

SELECT EXISTS(SELECT * FROM table1 WHERE ...)

文獻

根據以下評論:

SELECT EXISTS(SELECT 1 FROM table1 WHERE ...)


查看完整回答
反對 回復 2019-07-01
?
慕少森

TA貢獻2019條經驗 獲得超9個贊

我最近對這個問題做了一些研究。如果字段是文本字段,非唯一字段,則實現該字段的方式必須是不同的。

我用文本字段做了一些測試??紤]到我們有一個包含1M條目的表。37項等于“某物”:

  • SELECT * FROM test WHERE texte LIKE '%something%' LIMIT 1

    帶著

    mysql_num_rows()

    :0.039061069488525

    (更快)

  • SELECT count(*) as count FROM test WHERE text LIKE '%something%

    :16.028197050095s。
  • SELECT EXISTS(SELECT 1 FROM test WHERE text LIKE '%something%')

    :0.87045907974243。
  • SELECT EXISTS(SELECT 1 FROM test WHERE text LIKE '%something%' LIMIT 1)

    :0.044898986816406 s。

但是現在,對于BIGINTPK字段,只有一個條目等于“321321”:

  • SELECT * FROM test2 WHERE id ='321321' LIMIT 1

    帶著

    mysql_num_rows()

    :0.0089840888977051。
  • SELECT count(*) as count FROM test2 WHERE id ='321321'

    :0.00033879280090332 s。
  • SELECT EXISTS(SELECT 1 FROM test2 WHERE id ='321321')

    *0.00023889541625977
  • SELECT EXISTS(SELECT 1 FROM test2 WHERE id ='321321' LIMIT 1)

    *0.00020313262939453

    (更快)


查看完整回答
反對 回復 2019-07-01
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

例子:


mysql> SELECT * FROM table_1;

+----+--------+

| id | col1   |

+----+--------+

|  1 | foo    |

|  2 | bar    |

|  3 | foobar |

+----+--------+

3 rows in set (0.00 sec)


mysql> SELECT EXISTS(SELECT 1 FROM table_1 WHERE id = 1);

+--------------------------------------------+

| EXISTS(SELECT 1 FROM table_1 WHERE id = 1) |

+--------------------------------------------+

|                                          1 |

+--------------------------------------------+

1 row in set (0.00 sec)


mysql> SELECT EXISTS(SELECT 1 FROM table_1 WHERE id = 9);

+--------------------------------------------+

| EXISTS(SELECT 1 FROM table_1 WHERE id = 9) |

+--------------------------------------------+

|                                          0 |

+--------------------------------------------+

1 row in set (0.00 sec)

使用別名:


mysql> SELECT EXISTS(SELECT 1 FROM table_1 WHERE id = 1) AS mycheck;

+---------+

| mycheck |

+---------+

|       1 |

+---------+

1 row in set (0.00 sec)


查看完整回答
反對 回復 2019-07-01
  • 3 回答
  • 0 關注
  • 687 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號