我将300MB表分区并尝试使用此命令从p0
分区进行选择查询
SELECT * FROM employees PARTITION (p0);
但我收到了以下错误
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '(p0)' at line 1
如何编写select查询以从特定分区获取数据?
答案 0 :(得分:12)
根据您的MySql版本,在MySQL 5.6.2之前,PARTITION
关键字不存在。您将使用MySQL 5.5甚至5.1,但不是5.6。如果您使用的是MySQL 5.1
,那么您可以执行以下操作:
SELECT partition, count(ID)
FROM
(
SELECT ID,
case when condition then p1
when condition then p2
.....
end as partition
FROM
table
) s1
GROUP BY partition
注意:以上解决方案只是解决方法,以获得您想要的输出。
您也可以尝试此查询来计算分区的总行数。
SELECT table_rows as 'count(*)' FROM information_schema.partitions WHERE table_schema = schema() and table_name ='employees' and partition_name = 'p0';
注意:您可以将table_schema = schema()
更改为table_schema = 'yourschema'
答案 1 :(得分:8)
实际上,自MySQL 5.6以来,支持的语法是:
y = [i for j in range(k) for (i,k) in enumerate(x)]
答案 2 :(得分:2)
您说得对,5.1.54版本不支持明确选择PARTITION。请参阅this帖子
答案 3 :(得分:1)
答案 4 :(得分:1)
select * from employees partition (`p0`);
的正确格式如下所示,对我来说很好。
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
StoreDetails fragment = new StoreDetails();
Bundle bundle = new Bundle();
bundle.putString("store_id",pojo.getSTORE_ID());
bundle.putString("store_name",pojo.getSTORE_NAME());
bundle.putString("address",pojo.getSTORE_ADDRESS());
// bundle.putString("status",pojo.getSTATUS());
// bundle.putString("teammember",pojo.getSTATUS());
fragment.setArguments(bundle);
FragmentManager manager=fragment.getFragmentManager();
// in below line I am getting error
FragmentTransaction ft = manager.beginTransaction().replace(R.id.container,fragment,"fragment");
ft.addToBackStack("fragment");
ft.commit();
}
});
答案 5 :(得分:0)
选择*来自invoice_detail
分区(p1);
答案 6 :(得分:-1)
我认为有必要向可能偶然发现此页面的其他用户指出,一个300MB的表不需要分区。
300MB对于任何现代(甚至不是那么现代)的数据库来说都是微不足道的数据量,因此,如果将数据放在一个分区中的一个数据库的一个表中,则一切都会更好。