单表有索引,单表查询用到索引
几个单表联合成视图在视图上查找,explain表示不会用到索引。这情况,有什么好解决方法没?
几个单表联合成视图在视图上查找,explain表示不会用到索引。这情况,有什么好解决方法没?
解决方案 »
- Mysql noinstall 那些文件可以 删除掉 还能正常 使用呢?
- mysql密码重置,如何重置
- 刚安装的数据库怎么可以启动远程的服务器,不能启动本地服务器,启动报错
- 一个sql语句的写法,简单,请教!在线等待
- 急问:通过Microsoft OLE DB Provider for ODBC Drivers 连接 mysql odbc数据源的问题。
- 讨论一个查询
- 2000下装了Apache+PHP4+mysql,但mysql就是不能用
- 为什么我输入http://...../aabbcc.sql时出现是的文件内容啊
- MYSQL的一个问题——急请帮助:
- Mysql 不同平台下的binlog问题
- 好的优化方法
- 求一SQL语句,删除 字段中 字数大于5的内容
对于使用MERGE算法处理的视图,可以使用索引。但是,对于使用临时表算法处理的视图,不能在其基表上利用索引提供的优点(尽管能够在临时表的生成过程中使用索引)。
Query OK, 0 rows affected (0.05 sec)mysql> explain select userid from aavv;
+----+--------------+------------+-------+---------------+---------+---------+------+------+-
| id | select_type | table | type | possible_keys | key | key_len | ref | rows |
+----+--------------+------------+-------+---------------+---------+---------+------+------+-
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 8 |
| 2 | DERIVED | user | index | NULL | PRIMARY | 2 | NULL | 8 |
| 3 | UNION | user | index | NULL | PRIMARY | 2 | NULL | 8 |
| NULL | UNION RESULT | <union2,3> | ALL | NULL | NULL | NULL | NULL | NULL
+----+--------------+------------+-------+---------------+---------+---------+------
+------+-
--------+------+------+-------------+
key_len | ref | rows | Extra |
--------+------+------+-------------+
NULL | NULL | 8 | |
2 | NULL | 8 | Using index |
2 | NULL | 8 | Using index |
| NULL | NULL | NULL | |
--------+------+------+-------------+
4 rows in set (0.02 sec)
是走索引的
EXPLAIN SELECT * FROM view WHERE TIME> 1000000view 是由n个表结构相同的表union all 起来的
和你认为没有走索引的语句,这样大家可以一起分析具体的原因。
CREATE DEFINER=`test`@`%` PROCEDURE `USP_ASS_CreateView`($ViewName VARCHAR(50),$TableName VARCHAR(100))
BEGIN
BEGIN
SET @DropView = CONCAT('DROP VIEW IF EXISTS ',$ViewName,';');
PREPARE DropView FROM @DropView;
EXECUTE DropView;
END;
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tablename VARCHAR(50);
DECLARE Cmd VARCHAR(8000) DEFAULT '';
DECLARE Cur CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_name LIKE CONCAT('%',$TableName,'%');
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN Cur;
REPEAT
FETCH Cur INTO tablename;
IF NOT done THEN
SET Cmd = CONCAT(Cmd,'select * from ',tablename,' union all ');
END IF;
UNTIL done END REPEAT;
CLOSE Cur;
SET @Cmd = CONCAT('Create ALGORITHM = MERGE view ',$ViewName,' AS ',LEFT(cmd,LENGTH(cmd)-10),';');
PREPARE stmt FROM @Cmd;
EXECUTE stmt;
END;
END$$DELIMITER ;输入的含table的表结构都一样。
id select_type table type possible_keys key key_len ref rows Extra;2 DERIVED table1 ALL \N \N \N \N 1 ;3 UNION table2 ALL \N \N \N \N 1 ;\N UNION RESULT <union2,,3> ALL \N \N \N \N \N
1 PRIMARY \N \N \N \N \N \N \N Impossible WHERE noticed after reading const tables
2 DERIVED table1 ALL \N \N \N \N 1
3 UNION table2 ALL \N \N \N \N 1