[英]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
唯一可能的值是1
, 0
和null
。
現在分別列出500個ID。 我們將此稱為my_list
。 它們位於用換行符分隔的文本文件中。 該文件的名稱是myfile.txt
。
我想回答以下問題:
my_table
有多少行具有和my_list
和my_boolean_field中的ID為空。 my_table
有多少行具有my_list
和my_boolean_field == 1中的ID。 my_table
有多少行具有my_list
和my_boolean_field == 0中的ID。 my_table
有多少行具有的ID和不在my_list
和my_boolean_field中的ID為null。 my_table
有多少行具有和ID不在my_list
和my_boolean_field == 1中。 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.