问一个FEDERATED storage engine的问题

zuoxingyu 2011-09-21 03:25:04
手册上有这么一句话:
•The FEDERATED storage engine supports SELECT, INSERT, UPDATE, DELETE, TRUNCATE TABLE, and indexes. It does not support ALTER TABLE, or any Data Definition Language statements that directly affect the structure of the table, other than DROP TABLE. The current implementation does not use prepared statements.

我测试时,在源表上建的所有,FEDERATED 表上看不到。在FEDERATED表上建索引,提示

mysql> show create table user;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`a` int(11) DEFAULT NULL,
`ttoken` varchar(2048) DEFAULT NULL
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://root:123@192.168.0.10/test/user' |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> create index idx_2 on user(a);
ERROR 1031 (HY000): Table storage engine for 'user' doesn't have this option
mysql>



它说的支持INDEX,是怎么体现的?

有用过FEDERATED的来说说看。
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zuoxingyu 2011-09-21
  • 打赏
  • 举报
回复
原因是我在调用端表结构里没有加入索引。

结贴。
小小小小周 2011-09-21
  • 打赏
  • 举报
回复
测试没问题.
zuoxingyu 2011-09-21
  • 打赏
  • 举报
回复
源的索引如下:

mysql> show create table user;
+-------+--------------------------------
| Table | Create Table
+-------+--------------------------------
| user | CREATE TABLE `user` (
`a` int(11) DEFAULT NULL,
`ttoken` varchar(2048) DEFAULT NULL,
KEY `idx_1` (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+--------------------------------
1 row in set (0.00 sec)
zuoxingyu 2011-09-21
  • 打赏
  • 举报
回复
确定源是有索引的,而且本查询也可以用到索引,但是在调用端,就看不到,也用不到索引。

mysql> explain select * from user where a=1;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | user | ALL | NULL | NULL | NULL | NULL | 4 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.01 sec)

mysql> show index from user;
Empty set (0.01 sec)

lilinew 2011-09-21
  • 打赏
  • 举报
回复
肯定的
你在调用机器是不能创建索引的。 索引也是物理数据,索引必须放在源头机器。
文档的意思是 他该引擎可以利用源头机器 该表的索引 。

可以这样理解 这个引擎只能让你看到他的调用时候结构 数据
一旦源头字段 或者索引等物理结构任何改变,调用会失败。

源头数据的新加 删除 更改 这个可以实时传入到调用机器

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧