如果视图里只查一张表,则没问题。union另一张表之后,索引就不作用了。
是不是使用了union后,查询变成:先把两张表union,然后在结果中一条条找啊?
是不是使用了union后,查询变成:先把两张表union,然后在结果中一条条找啊?
解决方案 »
- mySQL Cluster群集 application 连接问题
- 一个小小的问题
- 关于买卖过程快速计算赚钱数量数据库表格设计问题,谢谢给与的任何帮助。
- 如何在MYSQL 中实现三先,也就是说我传进来一个参数有三个选择。用if then else 这种只能实现两种选择,而用if then elseif else 这种又要出错,该怎么办?
- mysql的procedure里面,查询语句放在V_SQL变量里面 怎么去执行它,看它返回多少行?
- 请教这个sql怎么写
- mysql 迁移到 db2的问题
- 如何用MySQL+C语言实现简单的学生管理系统功能
- 请问哪里有MYSQL的DRIVER?
- mysql用户密码
- mysql查询锁表了
- 如何连接虚拟机中的数据库
/*创建测试表结构---start*/
CREATE TABLE t1(
id INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30),
city VARCHAR(30),
PRIMARY KEY (id),
INDEX(`name`),
INDEX(city)
);CREATE TABLE t2(
id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(50),
addr VARCHAR(30),
PRIMARY KEY (id),
INDEX(username),
INDEX(addr)
);
/*创建测试表结构---end*//*插入测试数据--start*/
INSERT INTO t1(`name`,city)
SELECT '张三','北京' UNION ALL
SELECT '李四','上海' UNION ALL
SELECT '王五','广州' UNION ALL
SELECT '赵六','深圳' UNION ALL
SELECT '张七','天津' UNION ALL
SELECT '张八','杭州';INSERT INTO t2(username,addr)
SELECT 'admin','长沙' UNION ALL
SELECT 'asdf','武汉' UNION ALL
SELECT 'xfg','成都' UNION ALL
SELECT 'dfg','南京' UNION ALL
SELECT 'rty67','温州' UNION ALL
SELECT 'erjj','黑龙江';
/*插入测试数据--end*//*添加联合索引--start*/
ALTER TABLE t1
ADD INDEX index_to_view(`name`,city);
ALTER TABLE t2
ADD INDEX index_to_view(username,addr);
/*添加联合索引--end*//*创建视图--start*/
DROP VIEW test;
CREATE VIEW test AS
(
SELECT
't1' AS src,
a.id AS id,
a.name AS username,
a.city AS city
FROM
t1 a
)
UNION ALL
(
SELECT
't2' AS src,
b.id AS id,
b.username,
b.addr
FROM
t2 b
);
/*创建视图--end*//*执行测试---start*/
EXPLAIN SELECT * FROM test WHERE username='xx' AND id<100;
/*执行测试---end*/
到底用没用到索引
我也是用的union all 例子大致和楼主一样!
还有,我在mysql里,拿bit类型的数据和1 union,得到的结果怎么是BLOB?
怎么才能得到union后也是bit类型的?