mysql> create table test1(id int primary key,name varchar(10) );
Query OK, 0 rows affected (0.02 sec)
mysql> create table test2(id int primary key,name varchar(10) );
Query OK, 0 rows affected (0.03 sec)
可以看到test1在加别名前不会用到主键索引,而加了后就会用到,是什么原因呢?
另外 看到selecth和update不加别名都会用到主键索引
网上查询;
mysql为什么加个别名就能用到索引
在MySQL中,使用别名(alias)本身并不会直接导致索引的使用。但是,在某些情况下,别名可以间接影响查询优化器的决策,进而影响到是否使用索引。
MySQL的查询优化器(Optimizer)在处理查询时,会分析查询的结构、统计信息(如列的基数、索引的选择性等),以及可能的执行计划来决定是否使用索引。
在某些情况下,即使你在查询中使用了别名,优化器也可能基于别名所在的表达式是否可以被索引覆盖或者是否有助于减少数据扫描量来决定是否使用索引。
mysql delete可以强制使用索引吗?
在MySQL中,DELETE 语句本身并不直接支持强制使用特定的索引来加速删除操作。
mysql> select * from test2 force index(PRI) where id=6;
+----+------+
| id | name |
+----+------+
| 6 | ppp |
+----+------+
1 row in set (0.00 sec)
mysql> delete from test2 force index(PRI) where id=6;
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 'force index(PRI) where id=6' at line 1