mysql不建索引数据怎么查,怎么查看mysql索引是否无效

用mysql查询某字段是否有索引怎么做?

显示一个表所有索引的SQL语句是:

成都创新互联是专业的卓资网站建设公司,卓资接单;提供网站设计、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行卓资网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

show index from 数据库名.表名

查看某表某一列上的索引使用下面的SQL语句:

show index from 数据库名.表名 where column_name like '列名'

下面的SQL语句在我的数据库上执行成功:

show index from web.clubuser where column_name like 'user'。

mysql-哪些些情况需要或者不需要创建索引

1、主键自动建立唯一索引

2、频繁作为查询条件的字段

3、查询中与其他表关联的字段,外键关系建立索引

4、单键/组合索引的选择问题,高并发下倾向创建组合索引

5、查询中排序的字段,排序字段通过索引访问大幅提高排序速度

6、查询中统计或分组字段

1、表记录太少

2、经常增删改的表

3、数据重复且分布均匀的表字段,只应该为经常查询和最经常排序的数据列建立索引(如果某个数据类包含太多的重复数据,建立索引没有太大意义)

4、频繁更新的字段不适合创建索引(会增加IO负担)

5、where条件里用不到的字段不创建索引

MYSQL索引问题:索引在查询中如何使用?看了很多资料都只说索引的建立。是否建立了就不用再理会?

假如你有一个表,

SQL CREATE TABLE test_tab (

2 id INT,

3 name VARCHAR(10),

4 age INT,

5 val VARCHAR(10)

6 );

你的业务,有一个查询,是

SELECT * FROM test_tab WHERE name = 一个外部输入的数据

刚开始,数据不多的时候,执行效果还不错。

随着数据量的增加,这个查询,执行起来,越来越慢了。

然后在 name 上面 建立了索引

CREATE INDEX idx_test4_name ON test_tab (name );

这样, 可以加快前面那个查询的速度。

但是,某天,你执行了下面这个SQL, 发现速度又慢了

SELECT * FROM test_tab WHERE age = 25

为啥呢? 因为 age 字段上面,没有索引

索引只在 name 上面有

换句话说, 也就是 WHERE 里面的条件, 会自动判断,有没有 可用的索引,如果有, 该不该用。

多列索引,就是一个索引,包含了2个字段。

例如:

CREATE INDEX idx_test_name_age ON test_tab (name, age);

那么

SELECT * FROM test_tab

WHERE

name LIKE '张%'

AND age = 25

这样的查询,将能够使用上面的索引。

多列索引,还有一个可用的情况就是, 某些情况下,可能查询,只访问索引就足够了, 不需要再访问表了。例如:

SELECT

AVG( avg ) AS 平均年龄

FROM

test_tab

WHERE

name LIKE '张%'

这个时候, name 与 age 都包含在索引里面。 查询不需要去检索表中的数据。

mysql 如何优化无索引查询

mysql优化无索引查询:SQL CREATE TABLE test_tab (id INT,name VARCHAR(10),age INT,val VARCHAR(10)。

1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引。

2、应尽量避免在 where子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描。

3、应尽量避免在 where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。

运行mysql安装文件:

按 Next,然后选择安装方式,有 "Typical(默认)"、"Complete(完全)"、"Custom(用户自定义)",选择第二个选项 "Custom",下一步, MySQL Server (mysql服务器), Developer Components (开发者部分), Debug Symbols (调试符号), Server data files (服务器数据文件) 默认。

改变安装路径;原路径是"C:\Program Files\MySQL\MySQL Server 5.5\",也可以修改为:"E:\Program Files\MySQL Server 5.5\"。

mysql 没有索引的大表怎么查询

类似地,如果WHERE子句的查询条件里使用了函数(WHERE DAY(column) = …),MySQL也将无法使用索引。在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。

mysql 数据库里搜索商品名称,但是name(varchar)字段没建立索引,用什么方法效率最高?

单独的索引和复合索引的索引。单一索引,只包含单个列,一个表可以有多个单独的索引,而不是索引的组合的索引。综合指数,即包含多个列的电缆。

MySQL索引的类型包括:

(1)一般指数

这是最基本的索引,它没有任何限制。它创造了几种方法:

◆创建一个索引

CREATE INDEX INDEXNAME ON mytable的(用户名(长度));

如果CHAR,VARCHAR类型,长度可以小于的实际长度场,如果是BLOB和TEXT类型,必须指定长度,下同。

◆表结构

ALTER mytable的ADD INDEX [INDEXNAME]开(用户名(长度))

◆当您创建一个表直接指定

CREATE TABLE mytable的(ID INT NOT NULL ,用户名VARCHAR(16)NOT NULL,索引[INDEXNAME](用户名(长度)));

删除索引的语法:

DROP INDEX [INDEXNAME] ON mytable的;

(2)唯一索引

它类似于以前的一般指标,不同的是:索引列的值必须是唯一的,但是允许空值。如果它是一个综合指数相结合,列值??必须是唯一的。它创造了几种方法:

◆创建一个索引

CREATE UNIQUE INDEX INDEXNAME ON mytable的(用户名(长度))

◆表结构

ALTER mytable的ADD UNIQUE [INDEXNAME]开启(用户名(长度))

◆当您创建一个表直接指定

CREATE TABLE mytable的(ID INT NOT NULL,用户名VARCHAR(16)NOT NULL,UNIQUE [INDEXNAME](用户名(长度))) ;

(3)主键索引

这是一个特殊的唯一索引不允许空值。一般的时候同时创建主键索引的表的结构:

CREATE TABLE mytable的(ID INT NOT NULL,用户名VARCHAR(16)NOT NULL,PRIMARY KEY(ID));

当然,你可以使用ALTER命令。请记住:一个表只能有一个主键。

(4)综合指数

对于图像的对比度和组合索引单列索引,添加更多的字段的表:

CREATE TABLE mytable的(ID INT NOT NULL,用户名VARCHAR(16)NOT NULL ,城市VARCHAR(50)NOT NULL,年龄INT NOT NULL);

为了进一步榨取MySQL的效率,就要考虑建立组合索引。是的名称,城市,年龄建成一个索引,其中:

ALTER TABLE mytable的ADD INDEX name_city_age(名(10),城市,年龄);

建立表时,16 usernname长度,其中10。这是因为在正常情况下不超过10名,这将加快查询速度索引的长度,该指数将减少文件大小,提高INSERT的更新速度。

如果您创建的每个usernname一个单独的索引,城市,年龄,所以该表有三个单独的索引,上面的查询和索引的组合效率会有很大的不同,远远超过我们的组合索引少。虽然此时有了三个索引,但MySQL只可以使用它们认为这似乎是最有效的单一指标。

建立这样的组合索引,其实是三组相当于建立了以下综合指数:

usernname,城市,年龄usernname,城市usernname

为什么没有城市,年龄该做组合索引?它是一个综合指数,因为MySQL的结果“最左前缀”一个。这只是意味着,左侧只有从一开始的组合。不仅包含了这三个疑问将在综合指数中使用,下面的几个SQL就会使用这个组合索引:

SELECT * FROM mytable的WHREE用户名=“管理员”和城市=“郑州”SELECT * FROM mytable的WHREE用户名= “管理员”

接下来的几个未使用:

SELECT * FROM mytable的WHREE年龄为20及城市=“郑州”SELECT * FROM mytable的WHREE城市=“郑州”

(5)索引时间

在这里,我们已经学会了建立索引,那么我们需要在什么情况下创建索引?通常,当连接列和出现在需要建立索引,但也不完全如此,因为MySQL只,, =,BETWEEN,IN,LIKE,有的时候会使用索引。例如:

选择t.Name FROM mytable的吨LEFT JOIN mytable的M于t.Name = m.username WHERE m.age = 20和m.city ='郑州'

这时候就需要城市与年龄索引,由于userame mytable的表也出现在JOIN子句中,也有必要建立索引。

只是它需要像索引的时候一定提及。因为在一开始通配符%和_的查询,MySQL不会使用索引。例如,下面的语句将使用索引:

SELECT * FROM mytable的其中username like'admin%'

下一句不会使用:

SELECT * FROM mytable的WHEREt名称LIKE'% admin的

因此,更应注意使用LIKE差异。

(6)指数

的不足之处上面是说使用索引的好处,但过量使用索引将会造成滥用。因此,该指数也有其缺点:

◆虽然索引大大提高了查询速度,但会降低更新表,如表的INSERT,UPDATE的速度和DELETE。因为当你更新表,MySQL只保存数据,而且还节省大约索引文件。

◆建立索引会占用磁盘空间的索引文件。通常这个问题不是太严重,但如果你是在一个大表创建各种复合索引,索引文件将很快扩大。

指数只是其中的一个因素,以提高效率,如果你有大量的数据的MySQL表,你需要花时间去研究建立最佳的索引,或优化查询。

(7)使用索引

注意事项使用索引时,下面的一些技巧和注意事项:??

◆索引不会包含NULL值的列只要列中包含 BR /有NULL值?将不会被包含在索引中,复合索引,只要有包含NULL值的列,那么这个列是此复合索引无效。所以,我们不要让默认字段为NULL的数据库设计。

就用短串联指数指标,如果可能的话,你应该指定一个前缀长度。例如,如果一个CHAR(255)列,如果在前10或20个字符之内,多个值?是独一无二的,那就不要索引整个列。短索引不仅可以提高查询速度而且可以节省磁盘空间和I / O操作。

◆索引列排序

MySQL查询只使用一个索引,因此如果where子句已在索引中使用,然后按列的顺序将不会使用索引。因此,不要使用默认的数据库排序时排序操作即可满足要求;尽量不要包含多个排序列,如果需要的话最好创建这些列的一个综合指数。

◆like语句

在正常情况下运行不鼓励使用类似的操作,如果非使用不可,如何使用也是一个问题。如“%AAA%”不会使用索引而不是像“AAA%”可以使用索引。

◆不要在列选择*从用户那里YEAR(录入)2007年

操作将在每个行上进行的,这将导致失败而进行全表索引扫描,所以我们可以改变

选择*从用户那里录入时间'2007-01-01';

◆不使用NOT IN和

更多操作上的MySQL索引类型进行了介绍。

转移: - TID-33491


本文标题:mysql不建索引数据怎么查,怎么查看mysql索引是否无效
文章出自:http://ybzwz.com/article/hdhcjc.html