簡體   English   中英

如何以最高效的方式查詢此MySQL表?

[英]How to query this MySQL table in the most performant way?

假設我有一個這樣創建的MySQL表:

CREATE TABLE `my_table` (
  `my_id` char(32) NOT NULL,
  `my_boolean_field` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`my_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

這個桌子很大。 它有大約一千萬行。 my_boolean_field唯一可能的值是10null

現在分別列出500個ID。 我們將此稱為my_list 它們位於用換行符分隔的文本文件中。 該文件的名稱是myfile.txt

我想回答以下問題:

  1. my_table有多少行具有和my_list和my_boolean_field中的ID為空。
  2. my_table有多少行具有my_list和my_boolean_field == 1中的ID。
  3. my_table有多少行具有my_list和my_boolean_field == 0中的ID。
  4. my_table有多少行具有的ID和不在my_list和my_boolean_field中的ID為null。
  5. my_table有多少行具有和ID不在my_list和my_boolean_field == 1中。
  6. my_table有多少行具有和ID不在my_list和my_boolean_field == 0中。

獲得上述6個計數的最有效方法是什么?

您將必須進行全表掃描,因此這可能是最好的解決方案:

select (case when id in (< your list >) then 'in' else 'out' end) as inlist,
       my_boolean_field, count(*)
from mytable t
group by (case when id in (< your list >) then 'in' else out' end),
         my_boolean_field;

如果列表在帶有索引的表中,則可以在其上使用left join 然而,MySQL的優化搜索in恆定值(它使用二進制搜索)。 因此,這可能是最快的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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