mysql 索引相关知识
最近工作上被说了
1、关于sql语句大小问题
1)mysql默认情况下没有设置 root用户密码
[ztao@localhost ~]$ mysqladmin -uroot password "root"
2)默认情况下sql语句是限制在1M以内
max_allowed_packet 表示sql最大为1M
mysql> show VARIABLES like '%max_allowed_packet%';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| max_allowed_packet | 1048576 |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)
这里最好改大,如果太小的话sql语句超过1M会导致sql语句执行失败
3)
[root@localhost ztao]# vim /etc/my.cnf 添加红色的那一行
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=
max_allowed_packet = 160M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
mysql> show VARIABLES like '%max_allowed_packet%';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| max_allowed_packet | 167772160 |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)
这样能支持你一条sql语句在160M以内
2、在window下写的脚本文件放在linux上执行失败
[root@localhost test]# ./test.sh -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory主要原因是test.sh是我在windows下编辑然后上传到linux系统里执行的。
1.首先用vi命令打开文件2.在vi命令模式中使用 :set ff 命令可以看到改文件的格式为fileformat=dos3.修改文件format为unix使用vi/vim修改文件format命令::set ff=unix或者::set fileformat=unix然后:wq保存退出就可以了
#!/bin/sh
dbenv=dev if [ "${dbenv}" = "dev" ]; then
mysql_user=root
mysql_pass=root
mysql_host=
fi
if [ "${dbenv}" = "idc" ]; then
mysql_user=root
mysql_pass=root
mysql_host="-h 10.10.10.10"
fi mysql_cmd="mysql -u${mysql_user} -p${mysql_pass} ${mysql_host} --default-character-set=utf8" ${mysql_cmd}<<EOF
use test; drop table if exists t_user;
create table t_user
(
f_uin bigint() NOT NULL auto_increment,
f_name varchar() NOT NULL DEFAULT '',
f_createtime datetime not null default '0000-00-00 00:00:00',
f_status int() NOT NULL DEFAULT '',
f_rangenum int() NOT NULL DEFAULT '',
PRIMARY KEY (f_uin)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
EOF
echo "create table t_user ok"
2)通过python脚本来创建sql脚本
#!/usr/bin/python
#-*-coding:UTF-8-*- import sys def Insert(num): if(num<=10000000):
str = "insert into t_user (f_name,f_createtime,f_status,f_rangenum) values "
for i in range(num):
name = "zhantao_%d"%i
status = 1
rangenum = i
if(i==0):
strsql = "('%s',now(),%d,%d)"%(name,status,rangenum)
else:
strsql = ",('%s',now(),%d,%d)"%(name,status,rangenum)
str += strsql
f = open("insert.sql","w")
f.write(str)
f.close if __name__ == '__main__':
#num = int(sys.argv[1])
Insert(1000000)
[ztao@localhost 0418]$ ll -alhtotal 33Mdrwxrwxr-x 2 ztao ztao 4.0K Apr 18 20:16 .drwxrwxr-x 3 ztao ztao 4.0K Apr 18 20:02 ..-rwxrwxr-x 1 ztao ztao 733 Apr 18 20:03 create_table.sh-rwxrwxr-x 1 ztao ztao 538 Apr 18 20:10 insert.py-rw-rw-r-- 1 ztao ztao 33M Apr 18 20:11 insert.sql
mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> source /home/ztao/Work/Test/0418/insert.sql
Query OK, 1000000 rows affected (11.77 sec)
Records: 1000000 Duplicates: 0 Warnings: 0 mysql> source /home/ztao/Work/Test/0418/insert.sql
Query OK, 1000000 rows affected (8.90 sec)
Records: 1000000 Duplicates: 0 Warnings: 0 mysql> source /home/ztao/Work/Test/0418/insert.sql
Query OK, 1000000 rows affected (8.43 sec)
Records: 1000000 Duplicates: 0 Warnings: 0 mysql> source /home/ztao/Work/Test/0418/insert.sql
Query OK, 1000000 rows affected (8.28 sec)
Records: 1000000 Duplicates: 0 Warnings: 0 mysql> source /home/ztao/Work/Test/0418/insert.sql
Query OK, 1000000 rows affected (7.87 sec)
Records: 1000000 Duplicates: 0 Warnings: 0 mysql> select count(*) from t_user;
+----------+
| count(*) |
+----------+
| 5000000 |
+----------+
1 row in set (3.78 sec)
mysql> select * from t_user where f_rangenum = 123568;
+---------+----------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+---------+----------------+---------------------+----------+------------+
| 123569 | zhantao_123568 | 2015-04-18 20:11:36 | 1 | 123568 |
| 1123569 | zhantao_123568 | 2015-04-18 20:11:54 | 1 | 123568 |
| 2123569 | zhantao_123568 | 2015-04-18 20:12:05 | 1 | 123568 |
| 3123569 | zhantao_123568 | 2015-04-18 20:12:15 | 1 | 123568 |
| 4123569 | zhantao_123568 | 2015-04-18 20:12:25 | 1 | 123568 |
+---------+----------------+---------------------+----------+------------+
5 rows in set (2.19 sec) mysql> explain select * from t_user where f_rangenum = 123568;
+----+-------------+--------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | t_user | ALL | NULL | NULL | NULL | NULL | 4989899 | Using where |
+----+-------------+--------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)
mysql> alter table t_user add index f_rangenum_index(f_rangenum);
Query OK, 5000000 rows affected (1 min 45.16 sec)
Records: 5000000 Duplicates: 0 Warnings: 0
数量量大了,添加索引很慢。。。。。。。。
mysql> select * from t_user where f_rangenum = 123199;
+---------+----------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+---------+----------------+---------------------+----------+------------+
| 123200 | zhantao_123199 | 2015-04-18 20:11:36 | 1 | 123199 |
| 1123200 | zhantao_123199 | 2015-04-18 20:11:54 | 1 | 123199 |
| 2123200 | zhantao_123199 | 2015-04-18 20:12:05 | 1 | 123199 |
| 3123200 | zhantao_123199 | 2015-04-18 20:12:15 | 1 | 123199 |
| 4123200 | zhantao_123199 | 2015-04-18 20:12:25 | 1 | 123199 |
+---------+----------------+---------------------+----------+------------+
5 rows in set (0.02 sec) mysql> explain select * from t_user where f_rangenum = 123199;
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
| 1 | SIMPLE | t_user | ref | f_rangenum_index | f_rangenum_index | 4 | const | 5 | |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
1 row in set (0.00 sec)
mysql> select * from t_user where f_rangenum = 123199;
+---------+-------------------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+---------+-------------------------+---------------------+----------+------------+
| 123200 | zhantao_123599001123200 | 2015-04-18 20:11:36 | 1 | 123199 |
| 1123200 | zhantao_123599002 | 2015-04-18 20:11:54 | 1 | 123199 |
| 2123200 | zhantao_123199 | 2015-04-18 20:12:05 | 1 | 123199 |
| 3123200 | zhantao_123199 | 2015-04-18 20:12:15 | 1 | 123199 |
| 4123200 | zhantao_123199 | 2015-04-18 20:12:25 | 1 | 123199 |
+---------+-------------------------+---------------------+----------+------------+
5 rows in set (0.00 sec) mysql> select * from t_user where f_rangenum = 123199 and f_name = "zhantao_123599001123200";
+--------+-------------------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+--------+-------------------------+---------------------+----------+------------+
| 123200 | zhantao_123599001123200 | 2015-04-18 20:11:36 | 1 | 123199 |
+--------+-------------------------+---------------------+----------+------------+
1 row in set (0.00 sec) mysql> select * from t_user where f_name = "zhantao_123599001123200" and f_rangenum = 123199;
+--------+-------------------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+--------+-------------------------+---------------------+----------+------------+
| 123200 | zhantao_123599001123200 | 2015-04-18 20:11:36 | 1 | 123199 |
+--------+-------------------------+---------------------+----------+------------+
1 row in set (0.00 sec) mysql> explain select * from t_user where f_name = "zhantao_123599001123200" and f_rangenum = 123199;
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------------+
| 1 | SIMPLE | t_user | ref | f_rangenum_index | f_rangenum_index | 4 | const | 5 | Using where |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------------+
1 row in set (0.00 sec) mysql> explain select * from t_user where f_rangenum = 123199 and f_name = "zhantao_123599001123200";
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------------+
| 1 | SIMPLE | t_user | ref | f_rangenum_index | f_rangenum_index | 4 | const | 5 | Using where |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------------+
1 row in set (0.00 sec)
select * from t_user where f_name = "zhantao_123599001123200" and f_rangenum = 123199;select * from t_user where f_rangenum = 123199 and f_name = "zhantao_123599001123200";
mysql> explain select * from t_user where 1=1 and f_rangenum = 123199;
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
| 1 | SIMPLE | t_user | ref | f_rangenum_index | f_rangenum_index | 4 | const | 5 | |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
1 row in set (0.00 sec) mysql> explain select * from t_user where f_rangenum = 123199;
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
| 1 | SIMPLE | t_user | ref | f_rangenum_index | f_rangenum_index | 4 | const | 5 | |
+----+-------------+--------+------+------------------+------------------+---------+-------+------+-------+
1 row in set (0.00 sec) mysql> select * from t_user where f_rangenum = 123199;
+---------+-------------------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+---------+-------------------------+---------------------+----------+------------+
| 123200 | zhantao_123599001123200 | 2015-04-18 20:11:36 | 1 | 123199 |
| 1123200 | zhantao_123599002 | 2015-04-18 20:11:54 | 1 | 123199 |
| 2123200 | zhantao_123199 | 2015-04-18 20:12:05 | 1 | 123199 |
| 3123200 | zhantao_123199 | 2015-04-18 20:12:15 | 1 | 123199 |
| 4123200 | zhantao_123199 | 2015-04-18 20:12:25 | 1 | 123199 |
+---------+-------------------------+---------------------+----------+------------+
5 rows in set (0.00 sec) mysql> select * from t_user where 1=1 and f_rangenum = 123199;
+---------+-------------------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+---------+-------------------------+---------------------+----------+------------+
| 123200 | zhantao_123599001123200 | 2015-04-18 20:11:36 | 1 | 123199 |
| 1123200 | zhantao_123599002 | 2015-04-18 20:11:54 | 1 | 123199 |
| 2123200 | zhantao_123199 | 2015-04-18 20:12:05 | 1 | 123199 |
| 3123200 | zhantao_123199 | 2015-04-18 20:12:15 | 1 | 123199 |
| 4123200 | zhantao_123199 | 2015-04-18 20:12:25 | 1 | 123199 |
+---------+-------------------------+---------------------+----------+------------+
5 rows in set (0.00 sec)
总结是无论where后面的索引在什么位置都会使用索引
mysql 组合索引
mysql> alter table t_user_bak add index f_namerangenum_index(f_name,f_rangenum);
Query OK, 5000000 rows affected, 2 warnings (2 min 54.18 sec)
Records: 5000000 Duplicates: 0 Warnings: 0 mysql> show create table t_user_bak\G;
*************************** 1. row ***************************
Table: t_user_bak
Create Table: CREATE TABLE `t_user_bak` (
`f_uin` bigint(20) NOT NULL AUTO_INCREMENT,
`f_name` varchar(256) NOT NULL DEFAULT '',
`f_createtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`f_status` int(11) NOT NULL DEFAULT '',
`f_rangenum` int(11) NOT NULL DEFAULT '',
PRIMARY KEY (`f_uin`),
KEY `f_namerangenum_index` (`f_name`(255),`f_rangenum`)
) ENGINE=InnoDB AUTO_INCREMENT=5000001 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> explain select * from t_user_bak where f_rangenum= 155465 and f_name="zhantao_155465";
+----+-------------+------------+------+----------------------+----------------------+---------+-------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+----------------------+----------------------+---------+-------------+------+-------------+
| 1 | SIMPLE | t_user_bak | ref | f_namerangenum_index | f_namerangenum_index | 771 | const,const | 5 | Using where |
+----+-------------+------------+------+----------------------+----------------------+---------+-------------+------+-------------+
1 row in set (0.00 sec) mysql> explain select * from t_user_bak where f_name="zhantao_155465" and f_rangenum= 155465;
+----+-------------+------------+------+----------------------+----------------------+---------+-------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+----------------------+----------------------+---------+-------------+------+-------------+
| 1 | SIMPLE | t_user_bak | ref | f_namerangenum_index | f_namerangenum_index | 771 | const,const | 5 | Using where |
+----+-------------+------------+------+----------------------+----------------------+---------+-------------+------+-------------+
1 row in set (0.00 sec) mysql> explain select * from t_user_bak where f_name="zhantao_155465" ;
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
| 1 | SIMPLE | t_user_bak | ref | f_namerangenum_index | f_namerangenum_index | 767 | const | 5 | Using where |
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
1 row in set (0.00 sec) mysql> explain select * from t_user_bak where 1=1 and f_name="zhantao_155465" ;
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
| 1 | SIMPLE | t_user_bak | ref | f_namerangenum_index | f_namerangenum_index | 767 | const | 5 | Using where |
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
1 row in set (0.00 sec) mysql> explain select * from t_user_bak where f_createtime = '2015-04-18 21:19:35' and f_name="zhantao_155465" ;
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
| 1 | SIMPLE | t_user_bak | ref | f_namerangenum_index | f_namerangenum_index | 767 | const | 5 | Using where |
+----+-------------+------------+------+----------------------+----------------------+---------+-------+------+-------------+
1 row in set (0.00 sec)
3) 各个查询条件下的速度
mysql> show create table t_user_bak\G;
*************************** 1. row ***************************
Table: t_user_bak
Create Table: CREATE TABLE `t_user_bak` (
`f_uin` bigint(20) NOT NULL AUTO_INCREMENT,
`f_name` varchar(256) NOT NULL DEFAULT '',
`f_createtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`f_status` int(11) NOT NULL DEFAULT '',
`f_rangenum` int(11) NOT NULL DEFAULT '',
PRIMARY KEY (`f_uin`),
KEY `f_namecreatetimerangenum_index` (`f_name`(255),`f_createtime`,`f_rangenum`)
) ENGINE=InnoDB AUTO_INCREMENT=5000001 DEFAULT CHARSET=utf8
1 row in set (0.00 sec) ERROR:
No query specified mysql> show create table t_user\G;
*************************** 1. row ***************************
Table: t_user
Create Table: CREATE TABLE `t_user` (
`f_uin` bigint(20) NOT NULL AUTO_INCREMENT,
`f_name` varchar(256) NOT NULL DEFAULT '',
`f_createtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`f_status` int(11) NOT NULL DEFAULT '',
`f_rangenum` int(11) NOT NULL DEFAULT '',
PRIMARY KEY (`f_uin`),
KEY `f_name_index` (`f_name`(255)),
KEY `f_rangenum_index` (`f_rangenum`)
) ENGINE=InnoDB AUTO_INCREMENT=6000001 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> desc t_user_bak;
+--------------+--------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------------------+----------------+
| f_uin | bigint(20) | NO | PRI | NULL | auto_increment |
| f_name | varchar(256) | NO | MUL | | |
| f_createtime | datetime | NO | | 0000-00-00 00:00:00 | |
| f_status | int(11) | NO | | 0 | |
| f_rangenum | int(11) | NO | | 0 | |
+--------------+--------------+------+-----+---------------------+----------------+
5 rows in set (0.00 sec) mysql> desc t_user;
+--------------+--------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------------------+----------------+
| f_uin | bigint(20) | NO | PRI | NULL | auto_increment |
| f_name | varchar(256) | NO | MUL | | |
| f_createtime | datetime | NO | | 0000-00-00 00:00:00 | |
| f_status | int(11) | NO | | 0 | |
| f_rangenum | int(11) | NO | MUL | 0 | |
+--------------+--------------+------+-----+---------------------+----------------+
5 rows in set (0.00 sec)
mysql> select * from t_user where 1=1 and f_name = "zhantao_155465" and f_status !=2 and f_rangenum= 155465 ;
+---------+----------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+---------+----------------+---------------------+----------+------------+
| 155466 | zhantao_155465 | 2015-04-18 21:21:11 | 1 | 155465 |
| 1155466 | zhantao_155465 | 2015-04-18 21:21:20 | 1 | 155465 |
| 2155466 | zhantao_155465 | 2015-04-18 21:21:29 | 1 | 155465 |
| 3155466 | zhantao_155465 | 2015-04-18 21:21:38 | 1 | 155465 |
| 4155466 | zhantao_155465 | 2015-04-18 21:21:48 | 1 | 155465 |
+---------+----------------+---------------------+----------+------------+
5 rows in set (0.03 sec) mysql> select * from t_user_bak where 1=1 and f_name = "zhantao_155465" and f_status !=2 and f_rangenum= 155465 ;
+---------+----------------+---------------------+----------+------------+
| f_uin | f_name | f_createtime | f_status | f_rangenum |
+---------+----------------+---------------------+----------+------------+
| 155466 | zhantao_155465 | 2015-04-18 21:19:35 | 1 | 155465 |
| 1155466 | zhantao_155465 | 2015-04-18 21:19:47 | 1 | 155465 |
| 2155466 | zhantao_155465 | 2015-04-18 21:20:10 | 1 | 155465 |
| 3155466 | zhantao_155465 | 2015-04-18 21:20:20 | 1 | 155465 |
| 4155466 | zhantao_155465 | 2015-04-18 21:20:37 | 1 | 155465 |
+---------+----------------+---------------------+----------+------------+
5 rows in set (0.03 sec)
有了上面这些数据,我们整理下吧。未存在缓存下的数据。


看这个表,全表扫描最慢,我们可以理解,同时主键查询比覆盖所有扫描慢也还能接受,但是为什么主键扫描会比非主键扫描慢?
而且非主键查询需要消耗的1次查询的io+一次回表的查询IO,理论上是要比主键扫描慢,而出来的数据缺不是如此。
那么就仔细看下是个查询方式在各个主要阶段消耗的时间吧。
查询是否存在缓存,打开表及锁表这些操作时间是差不多,我们不会计入。具体还是看init,optimizing等环节消耗的时间。


1.从这个表中,我们看到非主键索引和覆盖索引在准备时间上需要开销很多的时间,预估这两种查询方式都需要进行回表操作,所以花在准备上更多时间。
2.第二项optimizing上,可以清晰知道,覆盖索引话在优化上大量的时间,这样在二级索引上就无需回表。
3. Sendingdata,全表扫描慢就慢在这一项上,因为是加载所有的数据页,所以花费在这块上时间较大,其他三者都差不多。
4. 非主键查询话在freeingitems上时间最少,那么可以看出它在读取数据块的时候最少。
5.相比较主键查询和非主键查询,非主键查询在Init,statistics都远高于主键查询,只是在freeingitems开销时间比主键查询少。因为这里测试数据比较少,但是我们可以预见在大数据量的查询上,不走缓存的话,那么主键查询的速度是要快于非主键查询的,本次数据不过是太小体现不出差距而已。
6.在大多数情况下,全表扫描还是要慢于索引扫描的。
tips:
过程中的辅助命令:1.清楚缓存reset query cache ;flush tables;2.查看表的索引:show index from tablename;mysql> set profiling=1;
Query OK, 0 rows affected (0.00 sec) mysql> show profiles;
+----------+------------+------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+------------------------------------------------------------+
| 1 | 0.00665000 | select * from t_user where f_rangenum in (1,2,3,4,5,6,7,8) |
+----------+------------+------------------------------------------------------------+
1 row in set (0.00 sec) mysql> show profile for query 1;
+--------------------+----------+
| Status | Duration |
+--------------------+----------+
| starting | 0.000153 |
| Opening tables | 0.000023 |
| System lock | 0.000006 |
| Table lock | 0.000012 |
| init | 0.000084 |
| optimizing | 0.000014 |
| statistics | 0.001265 |
| preparing | 0.000018 |
| executing | 0.000004 |
| Sending data | 0.003164 |
| end | 0.000010 |
| query end | 0.000004 |
| freeing items | 0.001880 |
| logging slow query | 0.000007 |
| cleaning up | 0.000006 |
+--------------------+----------+
15 rows in set (0.00 sec)
mysql> explain select * from t_user where f_rangenum in (select f_id from t_globe_num);
+----+--------------------+-------------+-----------------+---------------+---------+---------+------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------------+-----------------+---------------+---------+---------+------+---------+--------------------------+
| 1 | PRIMARY | t_user | ALL | NULL | NULL | NULL | NULL | 6001509 | Using where |
| 2 | DEPENDENT SUBQUERY | t_globe_num | unique_subquery | PRIMARY | PRIMARY | 8 | func | 1 | Using index; Using where |
+----+--------------------+-------------+-----------------+---------------+---------+---------+------+---------+--------------------------+
2 rows in set (0.00 sec) mysql> explain select * from t_user where f_rangenum in (1,2,3,4,5,6);
+----+-------------+--------+-------+------------------+------------------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+-------+------------------+------------------+---------+------+------+-------------+
| 1 | SIMPLE | t_user | range | f_rangenum_index | f_rangenum_index | 4 | NULL | 36 | Using where |
+----+-------------+--------+-------+------------------+------------------+---------+------+------+-------------+
1 row in set (0.04 sec)
mysql 索引相关知识的更多相关文章
- MongoDB 索引相关知识
背景: MongoDB和MySQL一样,都会产生慢查询,所以都需要对其进行优化:包括创建索引.重构查询等.现在就说明在MongoDB下的索引相关知识点,可以通过这篇文章MongoDB 查询优化分析了解 ...
- mysql 索引相关
引言: MYSQL由于其免费和开源的性质,在项目中用处广泛.大家都知道,一个MySQL数据库能够储存大量的数据,如果要在大量的数据中查找某一个数据,如果使用全表检索的话,即费时间又费力气,这时,就需要 ...
- mysql数据库相关知识
什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库.(来自:百度) 什么是sql? 结构化查询语言(Struct ...
- 数据库(mysql)相关知识
单表查询 排序 升序 select*from表名 order by字段 asc; 降序 select*from表名 order by字段 desc; 条件查询(包括通配符) ...
- MySQL 索引的知识整理
前言: 很多面试者,在面试的时候,都会回答,”索引就相当于一本书的字典,有了他能够很快的找到数据”, 这种答案好像在读书的时候老师告诉这么说的吧.今天来全面的描述一下数据库索引的原理及优化 ...
- 面试小知识:MySQL索引相关
前言 本模板主要是一些面试相关的题目,对于每一道问题,我会提供简单的解答,答案的来源主要是基于自己看了各方资料之后的理解,如果有错的,欢迎指点出来. 1. 什么是最左前缀原则? 以下回答全部是基于My ...
- mysql索引相关
索引有主键索引.唯一索引.普通索引 单列索引,复合索引. 复合索引(a,b,c),可以理解是有三个索引,分别是a.b.c三个索引 前缀不是a的话,复合索引都不起作用,前缀用函数或者是范围,比如< ...
- mysql 索引相关问题
mysql中key .primary key .unique key 与index区别 https://blog.csdn.net/nanamasuda/article/details/5254317 ...
- mysql索引相关理解
1.索引是高效获取数据的数据结构, 2.唯一索引,索引值不重复unique create unique index 索引名 on 表名(字段) alter table 表名 add unique in ...
随机推荐
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37730469 在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图 ...
- jdbc03 使用servlet实现
<%@page import="cn.bdqn.bean.News"%> <%@page import="cn.bdqn.service.impl.Ne ...
- OD: Ring0 & Kernel
开发技术讲究封装与模块化,安全技术强调底层安全性.安全技术需要打开封装.追根溯源! <0day 安全:软件漏洞分析技术(第2版)> 第21章 探索 Ring0 笔记 Intel x86 系 ...
- https大势已来?看腾讯专家如何在高并发压测中支持https
WeTest 导读 用epoll编写一个高并发网络程序是很常见的任务,但在epoll中加入ssl层的支持则是一个不常见的场景.腾讯WeTest服务器压力测产品,在用户反馈中收到了不少支持https协议 ...
- 兼容IE与firefox火狐的回车事件(js与jquery)
javascript 兼容IE与firefox火狐的回车事件 复制代码代码如下: <script language="javascript"> function key ...
- IIS 7.5 配置伪静态
IIS 7.5 配置伪静态_win服务器_脚本之家 win7下IIS的安装和配置 图文教程详细出处参考:http://www.jb51.net/article/29787.htm http://blo ...
- TFS统计编码行数语句
****** Script for SelectTopNRows command from SSMS ******/ SELECT TeamProjectProjectNodeName 项目名称 ,c ...
- 设置Cacti图形标题能显示中文
1.查看系统是否带有中文字体包 # ls /usr/share/fonts/chinese 如没有则安装 # yum -y install fonts-chinese 2.设置cacti使用的rr ...
- Core Data 学习简单整理01
Core Data是苹果针对Mac和iOS平台开发的一个框架, 通过CoreData可以在本地生成数据库sqlite,提供了ORM的功能,将对象和数据模型相互转换 . 通过Core Data管理和操作 ...
- Php GMP
GMP是The GNU MP Bignum Library,是一个开源的数学运算库,它可以用于任意精度的数学运算,包括有符号整数.有理数和浮点数.它本身并没有精度限制,只取决于机器的硬件情况. 本函数 ...